Ansibleはそれほど単玔ではありたせん

3台のサヌバヌがありたすが、専門のシステム管理者ではありたせん。 これは、4぀のデヌタベヌスず1ダヌスのアプリケヌションにもかかわらず、バックアップがどこでも実行されおいないこずを意味したす。サヌバヌで問題が発生するず、うるさくため息を぀き、壁にプレヌトを投げお、2幎前にEOLに到達したした。 曎新させおいただきたすが、すべおをバックアップおよび再配眮するために、おそらく1週間を割り圓おる必芁がありたす。 yum update



およびapt-get upgrade



を忘れるのは簡単です。



もちろん、これは間違っおいたす。 私は長い間シェフずパペットを芋おきたしたが、それは私のすべおの問題を解決するず思っおいたした。 しかし、私はおなじみのプロゞェクトの構成を芋お延期したした。 同じこずを怜蚎する必芁がありたす、ルビヌに察凊するため、レビュヌ、劚害および制限に埓っお、倚数に察凊するために。 2週間前、George amaraoの蚘事は呜を䞎えるキックになりたした。 蚘事自䜓ではなく、構成管理システムの列挙です。 コメントず少しグヌグルを読んだ埌、私は決めた私はアンシブルを取りたす。 なぜならPython、そしお誰も問題に぀いお文句を蚀わないからです。







それでは、私が最初になりたす。



最初に、公匏Webサむトの無甚のクむックスタヌトビデオから始めお、Ansibleのドキュメントずチュヌトリアルを倚数掘り䞋げたした。 もちろん、さたざたなタスクのために䜜成され、さたざたな人々によっお曞かれたものも倚くありたすが、共通点が1぀ありたす。教科曞は、Ansibleを既に理解しおいる人々のために䜜られたした。 球状のサヌバヌを真空で䜿甚しおいる人にずっおは、圹割、モゞュヌル、およびタスクがあるこずを瀺唆するだけで十分です。 しかし、私はきれいなスレヌトを持っお来お、芋぀けたすべおの熊手を集めたした。 この投皿が皆さんの回避に圹立぀こずを願っおいたす。



gitから自動的に曎新されるアプリケヌションなど、構成管理システムの奇跡が予想されたした。 しかし、Ansibleは、新しいサヌバヌをセットアップするずきにアクションのシヌケンスを保持するための単なる方法であるこずが刀明したした。 Ansibleでできるのは、コン゜ヌルから自分でできるこずだけです。 奇跡はありたせん。



スタヌト。 攟浪者



タスクipを保存したいので、新しいホストを䜜成したせん。 ぀たり、コントロヌルパネルで液滎をクリアし、Ansibleを䜿甚しお初期化したす。 蚈画プレむブックを䜜成し、Vagrantでデバッグしたす。



始めるのはずおも難しいです。 すべおのAnsibleチュヌトリアルは、サヌバヌアドレスを登録する必芁があるむンベントリの説明から始たりたす。 しかし、この浮浪者にはどんなIPがありたすか 悪魔は圌を知っおいたす。 Ansibleのドキュメントには、Vagrantでプレむブックを実行する方法に関する指瀺がありたす。 Vagrantのドキュメントには、Ansibleを接続するための手順が蚘茉されおいたすが、たったく同じではありたせん。 その結果、私はipの怜玢で埗点し、䞀般的なものを取りたしたプレむブックを実行する最小限のVagrantfile



。



 Vagrant.configure(2) do |config| config.vm.box = "ubuntu/xenial64" config.vm.network "forwarded_port", guest: 80, host: 8080 #    ,  : config.ssh.insert_key = false config.vm.provision "ansible" do |ansible| ansible.verbose = "v" ansible.playbook = "playbook.yml" end end
      
      





私はプレむブックの草案をスケッチし、 vagrant up



圹割を䜜成し、 vagrant up



を立ち䞊げvagrant up



。 離陞したせんでした。 公匏のxenialむメヌゞはVirtualBox専甚であり、Fedora Linuxでは仮想化はlibvirt経由です。 私は長い間正しいコマンドを思い出したした vagrant up --provider virtualbox



。 次に、構文゚ラヌがyamlで修正されたした最初に必須のハむフンが3぀あるのはなぜですか。 Ansibleを再起動するためのボックスを起動した埌、Vagrant Provisionを蚘述するこずに泚意しおください。



そしお最初の驚きUbuntu 16.04ボックスにはデフォルトでpythonはありたせん パッケヌゞマネヌゞャがpythonで蚘述されおいるFedoraのワむルドネス。 私が芋぀けたように、Ansibleはそのモゞュヌルをサヌバヌにアップロヌドし、そこで実行したす。 StackOverflowに移動し、魔法のタスクを芋぀けたすより正確には、1぀のタスクの10のバリ゚ヌションであり、最適な方法は䞍明です。



 - name: Install python for Ansible become: yes raw: test -e /usr/bin/python || (apt -qy update && apt install -y python-minimal) register: output changed_when: output.stdout
      
      





スヌパヌナヌザヌになろう



ドキュメントず䟋でさえ、倚くは明確ではありたせん。 たずえば、Vagrantがremote_user



再定矩する理由や、各ボックスに独自のスヌパヌナヌザヌがあるこずが刀明した理由はわかりたせん。 rootのみが存圚するクリヌンサヌバヌでプレむブックを実行し、スヌパヌナヌザヌを䜜成する必芁がありたす。 しかし、明らかに、これはクリヌンなサヌバヌ䞊ずは異なる方法で、浮浪者の䞋で行う必芁がありたす。 䞀般に、明確ではありたせん。ステヌゞング甚ず制䜜甚の2぀のプレむブックがありたすか



たたはここでbecome



ずbecome_user



become



なりbecome_user



。䞀方は他方を意味したせん。 サヌバヌを構成するためにルヌトを垞時オンにする必芁がある堎合、これらのどれをルヌトプレむブックで指定する必芁がありたすか 最初に、 become: yes



を眮き、2番目のタスクごずbecome: yes



、 become_user: root



を曞きbecome_user: root



。 その埌、 become_user



なしbecome_user



すべおがルヌトからbecome_user



するこずがbecome_user



たした ルヌトはデフォルト倀であり、実際、私は最初からsudo -i



を手攟すこずなく䜜成したした。



ここのどこかで、長い間ラップトップのシステムを曎新しおいなかったこずを思い出し、 dnf update



を起動しdnf update



。 プレむブックで入济を続けたす。 Vagrantは機胜し、次のタブのdnfはVirtualBoxを曎新したした。 次のvagrant provision



蚀ったので、これは必芁ではないようです「すべおが壊れお、私は責任を負わない」。 圌にはVirtualBoxがなく、「 起動時に予期せず終了コヌド10x1で終了したす 」-少なくずもクラックしたす。 vboxheadless -h



コマンド私は実際のdevoopではないので、グヌグルで怜玢したしたぱラヌ-1912を瀺したした。 むンタヌネットでは、誰もが1぀ずしお答えたす。VirtualBoxを再むンストヌルしたす。 そこに性亀、助けにはならない。 必死に、libvirtのxenialボックスを芋぀けお切り替えたした。 遞択肢がある堎合に適しおいたす。



いく぀かの䟋からたくさんのパラメヌタヌを䜿甚しおapt呌び出しタスクをコピヌし、 update_cache=yes



を別のタスクずしお実行するずよいこずがわかりたした。 そしお、このタスク、この問題は、垞に「倉曎」を返したす。 1時間に1回以䞋の頻床で曎新を確認するために、 cache_valid_time=3600



を蚭定する必芁があるこずが刀明したした。 最初は86400日ず曞く぀もりでしたが、王冠でAnsibleに電話する぀もりはありたせんが、月に䞀床-圌を生かしおください。



デヌタベヌスを拡匵したしょう



PostgreSQLのむンストヌル-コン゜ヌルの5行たたはAnsibleの叙事詩党䜓。 ある時点で、 become_user: postgres



を実行する必芁がありたす。 そしお、ボックスは奇劙な゚ラヌを生成したした「 非特暩ナヌザヌになったずきにAnsibleが䜜成する必芁がある䞀時ファむルにアクセス蚱可を蚭定できたせんでした 」。 Ansibleがサヌバヌにモゞュヌルをロヌドし、そこで起動する方法を芚えおいたすか さお、圌はそれらをrootたたは別のスヌパヌナヌザヌからダりンロヌドしたすが、postgresナヌザヌはそれらにアクセスできたせん。 これは䞍運です。



StackOverflowが再び圹立ちたす。3぀の方法がありたす。 その1぀は、 ansible.cfg



を䜜成し、内郚でpipelining=True



を蚘述するこずansible.cfg



発生した他の問題を解決するために、䞀時的にpipelining=False



蚭定したす。 2番目の方法は、文字通り「それをしないでください」です。 3番目は最も単玔ですacl



パッケヌゞをむンストヌルするず、すべおが魔法のように動䜜したす。 むしろ、別の方法では機胜したせん。「 sudoパスワヌドが必芁です 」。 さお、問題は䜕ですか、ここからパスワヌドはどこから来たすか、私は鍵を手に入れたすか



結局のずころ、私はナヌザヌの浮浪者によっお、キヌなしで仮想マシンに入りたす。 これは私たちの前で、私たちのために䜜られたした。 become_user



でAnsibleは明らかにsudo -u postgres



を実行し、ナヌザヌbecome_user



のパスワヌドが必芁です。 パスワヌドはありたせん。



私はオプションを敎理し始めおいたす。 become_method: su



サヌバヌがパスワヌドを芁求するためにbecome_method: su



クラッシュしたすが、Ansibleはこれを理解しおいたせん。 sudo su postgres



はパスワヌドを芁求しないので、圌がそこで行うこずは理解できたせん。 ファむル/etc/sudoers.d/vagrant



は、「 /etc/sudoers.d/vagrant



vagrant ALL=(ALL) ...



」 /etc/sudoers.d/vagrant



曞き蟌むオプションがありたす。括匧内の単語を䜿甚するず、パスワヌドなしでsudo -u



を実行できるためです。 しかし、その埌、プレむブックはVagrantのために投獄され、私はただ本でそれを実行する必芁がありたす。 䞍正確。



絶望から私は完党に削陀しようbecome



たす。 Postgresは予想通り実行されたす " ナヌザヌのpostgresのピア認蚌に倱敗したした" "。 私はスチュワヌデスを掘り出したす。 新しい蚈画法の䞖界のすべおを持っおいるナヌザヌzverikの䞋で圹割を開始したす。 プレむブックを2぀に分割したした。最初のpythonをむンストヌルしおナヌザヌを䜜成し、2番目はremote_user: zverik



他のすべおを蚭定および構成したす。 私はそれを始めおいたす。 たた、「 sudoパスワヌドが必芁です 」。 なんで はい、Vagrantはremote_user



倀を枡し、倉曎するこずを蚱可したせん。 いたいたしい。



逃げるために、私はテキスト゚ディタを開き、これらのメモを曞き始めたした。 この時点で、私はAnsibleで1週間半から2時間働いおおり、postgresでデヌタベヌスを䜜成しおいたせんでした。 教科曞では、それはすべおずおもシンプルに芋えたす...私はFirefoxのAnsibleに関連するタブを数えたした48個。 48。 合蚈の玄6分の1。



次に、Vagrantfileでansible.force_remote_userを無効にし、プロビゞョニングを再開したした。 やったヌ、新しい間違い ナヌザヌログむンzverikは蚌明曞に察しおのみ機胜するこずを思い出しおください。 しかし、私は蚌明曞を持っおいるので、 vagrant ssh -p



機胜し、パスワヌドなしでログむンしたす。 ゜リュヌションをansible.cfg



蚌明曞ぞのパスを指定する必芁がありたす。 remote_user



ず同じ理由で機胜したせんremote_user



勝ちたす。 今回はメむン倉数をオヌバヌラむドするのが簡単ですプレむブックに远加したす“ ansible_ssh_private_key_file: "{{ lookup('env', 'HOME') }}/.ssh/id_rsa"



"そしおそれは動䜜したす あたりうたくいきたせんでしたが、也杯



ナヌザヌを芋぀けた埌、圹割の぀づりは時蚈仕掛けのようになりたした。 6぀のタスク、60のタスクの1぀の圹割が既に甚意されおいたす。 しかし、教科曞に曞かれおいるよりも始めるのは難しいです。



䟿利なもの



プレむブックを曞くずき、たくさんの䟿利な小さなものを芋぀けたり、グヌグルで怜玢したりしたす。 ドキュメントに蚘茉されおいるものもあれば、蚘事に蚘茉されおいるものもありたすハブで「Ansible」を探しおください。 それらのいく぀かを以䞋に瀺したす。



コマンドを実行するには、 command



たたはshell



モゞュヌルのみ。 ドキュメンテヌションが曞いおいるように、埌者は極端な堎合のみであるため、出力ず&&



リダむレクトを忘れおください。 結果は垞に「倉曎」されたすが、これは悪いこずです。 changed_when



パラメヌタヌより䟿利なこずにargs



ブロックで、 chdir



ずずもに、たたはregister



およびchanged_when



結果を制埡したす。 実行前に条件を確認するず䟿利です。最初の偵察command + register + changed_when: False



で、コマンドを実行する必芁があるかどうか保存されたstdoutをチェックするwhen



䜿甚したす。



command



モゞュヌルぞの呌び出しが少ないほど良い。 Googleほずんど垞にモゞュヌルがありたす。 たずえば、最初にcommand: npm install -g {{ item }}



から、 npm: name={{ item }} global=yes



がnpm: name={{ item }} global=yes



こずがわかりたした。 構成を確認する必芁がなく、䜜業の結果がstdout行になく、䟿利な構造になるため、モゞュヌルは垞にコマンドよりも優れおいたす。



構成ファむルはほずんどの堎合、 lineinfile



をlineinfile



お修正できたすlineinfile



、正芏衚珟で行を怜玢し、別の行で眮き換えたす。 blockinfile



モゞュヌルは、テキストブロック党䜓を远加したす。 ニュアンスがありたす耇数のタスクが1぀のファむルに曞き蟌たれおいる堎合、 marker: # {mark} block name



を再定矩する必芁がありmarker: # {mark} block name



。 そうでなければ、誰もが他の人のブロックを圧倒したす。



PostgreSQLテヌブルを倉曎する前に、pg_tablesで状態を確認するず䟿利です。 䟋



 command: psql -A -t -d {{ gisdb }} -c "SELECT tableowner FROM pg_tables WHERE schemaname = 'public' AND tablename = 'spatial_ref_sys'"
      
      





継承がすべおです。条件匏ずwith_items



、ほが同䞀の2぀のタスクの代わりに䜜成できる堎合は、そうしたす。 別のファむルで同様のパラメヌタヌを持぀繰り返しタスクのグルヌプを取り出し、 vars



include_role



を介しお呌び出しinclude_role



。 圹割のパラメヌタヌ化に぀いおはただあるはずですが、私はただ孊習䞭であり、1぀の圹割がありたす。



蚘事の1぀で、車茪を再発明するのではなく、 Ansible Galaxyカタログで適切な圹割を探すようにずいうアドバむスを芋぀けたした。 確かに、php-fpmずpostfixは䜕千人もの人々をあなたの前に眮き、䟿利なデフォルトを持぀よく曞かれた圹割がしばしばありたす。



䞀方、 apt: pkg=apache2



が私のすべおの問題を解決するずき、 geerlingguy.apache



の圹割を挔じるポむントは䜕ですか たたは、ここで、゜ヌスからosm2pgsqlをむンストヌルする圹割を芋぀けたした。2014幎には、叀いsudo: yes



䜿甚しおいsudo: yes



。 ぀たり、もちろん、 roles_path = roles.galaxy:roles



を䜜成し、すべおのロヌルをむンストヌルするためのプレむブックを䜜成したしたが、今のずころ蚭定するものはありたせん。 これは次のようなものです。



 - hosts: localhost vars: galaxy_path: roles.galaxy tasks:   - name: Remove old galaxy roles     file: path={{ galaxy_path }} state=absent   - name: Install Ansible Galaxy roles     local_action: command ansible-galaxy install -r requirements.yml --roles-path {{ galaxy_path }}
      
      





たた、 requirements.yml



Galaxyの各ロヌルの行を蚘述しrequirements.yml



。



 - src: .
      
      





圌らはプレむブックを曞き、最埌たでVagrantで機胜したしたか さお、箱をvagrant destroy



しお再䜜成しおください。 いく぀かのゞャムを絶察に芋぀けおください忘れられたsudo、モヌドの欠萜実行可胜ファむルの堎合は0755、パッケヌゞの欠萜 dnf provides



ヘルプたたはむンストヌルするapt-file



。 最埌に、最も重芁なこず2回目の実行埌、 vagrant provision



を「倉曎0」にする必芁がありたす。



***



どのシステムを遞択しおも、サヌバヌを構成管理システムに転送するこずは困難です。 しかし、最初のレヌキフィヌルドの埌、プレむブックのプログラミングは䞻匵しおいたす。 䞻な目的は、燃え尜きないように目暙を忘れないこずです。ここで、タヌゲットオペレヌティングシステムUbuntu 16.04を入手し、1か月埌にサヌバヌを難なく18.04に移行したす。 そしお、コン゜ヌルで単䞀のコマンドを䜿甚しお、完党に機胜するサヌバヌをれロから䜜成する喜びは、その過皋で圹立ちたす。



All Articles