Ansible の基本。これがなければ、プレむブックは粘着性のパスタの塊になっおしたいたす。

私は他の人の Ansible コヌドをたくさんレビュヌし、自分でもたくさん曞きたす。 間違い (他人ず私自身の䞡方) を分析し、たた倚くのむンタビュヌを行っおいるうちに、Ansible ナヌザヌが犯す䞻な間違い、぀たり基本的なものを習埗せずに耇雑な䜜業に手を染めおしたうこずに気づきたした。

この普遍的な䞍公平を正すために、Ansible をすでに知っおいる人向けに Ansible の入門曞を曞くこずにしたした。 譊告しおおきたすが、これは人間の再話ではありたせん。文字が倚く、写真は䞀切含たれおいない長文です。

読者が期埅するレベルは、すでに数千行の yamla が曞かれおおり、䜕かがすでに制䜜されおいるものの、「どういうわけかすべおが歪んでいる」ずいうこずです。

タむトル

Ansible ナヌザヌが犯す䞻な間違いは、䜕かが䜕ず呌ばれおいるかを知らないこずです。 名前が分からないず、ドキュメントに䜕が曞かれおいるかを理解できたせん。 生きた䟋: むンタビュヌ䞭、Ansible でたくさんのこずを曞いおいるず蚀っおいたように芋える人は、「プレむブックはどのような芁玠で構成されおいたすか?」ずいう質問に答えるこずができたせんでした。 そしお私が「そのプレむブックは遊びで構成されおいるずいう答えが予想される」ず瀺唆したずころ、「私たちはそんなものは䜿いたせん」ずいうひどいコメントが続きたした。 人々はお金のために Ansible を䜜成しおおり、Play は䜿甚したせん。 圌らは実際にそれを䜿っおいたすが、それが䜕であるか知りたせん。

それでは、簡単なこずから始めたしょう。それは䜕ず呌ばれるものですか。 このこずを知っおいるかもしれたせんし、ドキュメントを読んだずきに泚意を払わなかったために知らないかもしれたせん。

ansible-playbook はプレむブックを実行したす。 Playbook は yml/yaml 拡匵子を持぀ファむルで、その䞭には次のようなものが含たれたす。

---
- hosts: group1
  roles:
    - role1

- hosts: group2,group3
  tasks:
    - debug:

このファむル党䜓がプレむブックであるこずはすでに認識しおいたす。 圹割がどこにあるのか、タスクがどこにあるのかを瀺すこずができたす。 しかし、遊びはどこにあるのでしょうか そしお、遊びず圹割たたはプレむブックの違いは䜕ですか?

すべおドキュメントに蚘茉されおいたす。 そしお圌らはそれを芋逃したす。 初心者 - 内容が倚すぎお、䞀床にすべおを芚えられないからです。 経隓豊富 - なぜなら「些现なこず」だから。 経隓がある堎合は、これらのペヌゞを少なくずも XNUMX か月に XNUMX 回読み盎しおください。そうすれば、コヌドはクラスをリヌドするものになりたす。

したがっお、芚えおおいおください: プレむブックは、プレむず import_playbook.
これは XNUMX ぀の遊びです:

- hosts: group1
  roles:
    - role1

これもたた別の遊びです。

- hosts: group2,group3
  tasks:
    - debug:

遊びずは䜕ですか なぜ圌女が

Play および Only Play は、ロヌルおよび/たたはタスクのリストを、それらを実行する必芁があるホストのリストに関連付けるため、Play は Playbook の重芁な芁玠です。 ドキュメントの奥深くに次の蚘述がありたす。 delegate_to、ロヌカル ルックアップ プラグむン、ネットワヌク CLI 固有の蚭定、ゞャンプ ホストなど。 これらを䜿甚するず、タスクが実行される堎所をわずかに倉曎できたす。 でも、それは忘れおください。 これらの賢いオプションにはそれぞれ非垞に特殊な甚途があり、決しお䞇胜ではありたせん。 そしお、私たちは誰もが知っお䜿甚すべき基本的なこずに぀いお話しおいたす。

「どこか」で「䜕か」を挔奏したい堎合は、playず曞きたす。 圹割ではありたせん。 モゞュヌルずデリゲヌトを䜿甚するロヌルではありたせん。 あなたはそれを受け取っお遊びを曞きたす。 その䞭で、ホストフィヌルドには実行する堎所をリストし、ロヌル/タスクには䜕を実行するかをリストしたす。

シンプルですよね そうでなければどうしおあり埗たすか

遊び以倖で「これをしたい」ずいう欲求が生たれる特城的な瞬間の䞀぀が、「すべおを敎える圹割」です。 最初のタむプのサヌバヌず XNUMX 番目のタむプのサヌバヌの䞡方を構成する圹割が必芁です。

兞型的な䟋はモニタリングです。 監芖を構成する監芖ロヌルが必芁です。 監芖の圹割は、(プレむに応じお) 監芖ホストに割り圓おられたす。 しかし、監芖するには、監芖察象のホストにパッケヌゞを配信する必芁があるこずがわかりたした。 なぜデリゲヌトを䜿甚しないのでしょうか? iptables も蚭定する必芁がありたす。 代衚 監芖を有効にするには、DBMS の構成を䜜成/修正する必芁もありたす。 代衚 創造性が欠けおいる堎合は、代衚団を䜜るこずもできたす include_role グルヌプのリストに察しおトリッキヌなフィルタヌを䜿甚するネストされたルヌプ内、および内郚 include_role もっずできるこずがある delegate_to たた。 そしお出発したす...

「すべおを実行する」単䞀の監芖ロヌルを持ちたいずいう良い願いは、私たちを完党な地獄に導きたす。ほずんどの堎合、そこから抜け出す方法は XNUMX ぀だけです。それは、すべおを最初から曞き盎すこずです。

ここでどこで間違いが起こったのでしょうか ホスト X でタスク "x" を実行するには、ホスト Y に移動しおそこで "y" を実行する必芁があるこずがわかった瞬間、単玔な挔習を実行する必芁がありたした。移動しお play を曞き蟌み、これをホスト Y で実行したす。 「x」に䜕かを加えるのではなく、最初から曞きたす。 ハヌドコヌドされた倉数を䜿甚する堎合でも。

䞊蚘の段萜のすべおが正しく述べられおいるようです。 しかし、これはあなたの堎合ではありたせん! DRY でラむブラリに䌌た再利甚可胜なコヌドを曞きたいず考えおおり、それを行う方法を探す必芁があるからです。

ここに別の重倧な間違いが朜んでいたす。 この゚ラヌにより、倚くのプロゞェクトが蚱容範囲で曞かれたもの (もっず良くなる可胜性はありたすが、すべおが機胜し、簡単に完了できたす) から、䜜成者ですら理解できない完党な恐怖に倉わりたした。 それは機胜したすが、䜕も倉曎するこずは神から犁じられおいたす。

゚ラヌ: ロヌルはラむブラリ関数です。 この䟋えによっお、倚くの良い始たりが台無しになっおしたったので、芋おいるのがただただ悲しくなりたす。 このロヌルはラむブラリ関数ではありたせん。 圌女は蚈算ができず、プレヌレベルの決定を䞋すこずができたせん。 遊びがどのような決断を䞋すかを思い出させおください。

ありがずう、その通りです。 Play は、どのホストでどのタスクずロヌルを実行するかを決定したす (より正確には、Play には情報が含たれおいたす)。

この決定を圹割に委任し、蚈算を䌎う堎合でも、あなた自身 (そしおあなたのコヌドを解析しようずする人) が悲惚な運呜に陥るこずになりたす。 圹割はそれがどこで実行されるかを決定したせん。 この決定は遊びによっお行われたす。 圹割は、蚀われた堎所で、蚀われたこずを実行したす。

Ansible でプログラミングするこずがなぜ危険なのか、そしおなぜ COBOL が Ansible よりも優れおいるのかに぀いおは、倉数ず jinja に぀いおの章で説明したす。 ずりあえず、䞀぀だけ蚀っおおきたす。各蚈算はグロヌバル倉数の倉曎の消えない痕跡を残し、それに぀いおは䜕もできたせん。 二぀の「痕跡」が亀わった瞬間、すべおは消え去った。

気難しい人向けの泚意: この圹割は確かに制埡フロヌに圱響を䞎える可胜性がありたす。 食べる delegate_to そしおそれは合理的な甚途がありたす。 食べる meta: end host/play。 しかし 基本を教えたこずを芚えおいたすか? 忘れたした delegate_to。 私たちは最もシンプルで最も矎しい Ansible コヌドに぀いお話しおいたす。 これは、読みやすく、曞きやすく、デバッグしやすく、テストしやすく、完了するのも簡単です。 そこで、もう䞀床:

play ず play のみが、どのホストで䜕を実行するかを決定したす。

このセクションでは、遊びず圹割の察立に぀いお取り䞊げたした。 次に、タスクず圹割の関係に぀いお説明したす。

タスクず圹割

遊びを考えおみたしょう:

- hosts: somegroup
  pre_tasks:
    - some_tasks1:
  roles:
     - role1
     - role2
  post_tasks:
     - some_task2:
     - some_task3:

foo を実行する必芁があるずしたしょう。 そしおそれは次のようになりたす foo: name=foobar state=present。 これはどこに曞けばいいのでしょうか プレで 圹職 圹割を䜜成したすか?

...それで、タスクはどこぞ行ったのでしょうか?

もう䞀床基本である再生デバむスから始めたす。 この問題に浮いおいるず、プレヌを他のすべおの基瀎ずしお䜿甚できなくなり、結果は「䞍安定」になりたす。

再生デバむス: hosts ディレクティブ、再生自䜓の蚭定、および pre_tasks、タスク、ロヌル、post_tasks セクション。 プレむのための残りのパラメヌタは、今のずころ私たちにずっお重芁ではありたせん。

タスクず圹割を含むセクションの順序: pre_tasks, roles, tasks, post_tasks。 意味的には実行順序は次のずおりです。 tasks О roles が明確でない堎合、ベスト プラクティスによれば、セクションを远加しおいたす tasks、そうでない堎合にのみ roles。 ある堎合 roles、添付されたすべおのタスクがセクションに配眮されたす pre_tasks/post_tasks.

残っおいるのは、すべおが意味的に明確であるずいうこずだけです。 pre_tasksそれから rolesそれから post_tasks.

しかし、モゞュヌル呌び出しはどこにあるのか?ずいう質問にはただ答えおいたせん。 foo 曞く 各モゞュヌルのロヌル党䜓を蚘述する必芁がありたすか? それずも党おに厚い圹割を持たせた方が良いのでしょうか たた、圹割ではない堎合、事前たたは事埌、どこに曞けばよいのでしょうか?

これらの質問に察する合理的な答えがない堎合、それは盎芳力の欠劂、぀たり同じ「䞍安定な基瀎」の兆候です。 それを理解したしょう。 たず、秘密の質問: プレむに問題がある堎合 pre_tasks О post_tasks (タスクやロヌルはありたせん)、最初のタスクを実行するず䜕かが壊れる可胜性がありたす。 post_tasks 最埌たで移動させおいただきたす pre_tasks?

もちろん、質問の文蚀はそれが壊れるこずを瀺唆しおいたす。 しかし、正確には䜕でしょうか

...ハンドラヌ。 基本を読むず、すべおのハンドラヌが各セクションの埌に自動的にフラッシュされるずいう重芁な事実がわかりたす。 それらの。 からのすべおのタスク pre_tasks、次に通知されたすべおのハンドラヌ。 その埌、すべおのロヌルず、ロヌル内で通知されたすべおのハンドラヌが実行されたす。 埌 post_tasks そしおそのハンドラヌたち。

したがっお、タスクをドラッグするず、 post_tasks в pre_tasks堎合、ハンドラヌが実行される前にそれを実行する可胜性がありたす。 たずえば、次の堎合 pre_tasks Web サヌバヌがむンストヌルおよび構成されおいるこず、および post_tasks 䜕かが送信された堎合、このタスクをセクションに転送したす pre_tasks 「送信」時点ではサヌバヌはただ実行されおおらず、すべおが壊れるずいう事実に぀ながりたす。

もう䞀床考えおみたしょう、なぜ必芁なのか pre_tasks О post_tasks? たずえば、圹割を実行する前に必芁なもの (ハンドラヌを含む) をすべお完了するためです。 あ post_tasks これにより、ロヌル (ハンドラヌを含む) の実行結果を操䜜できるようになりたす。

掞察力のある Ansible 専門家が、それが䜕であるかを教えおくれたす。 meta: flush_handlers、しかし、プレむ䞭のセクションの実行順序に䟝存できるのに、なぜフラッシュハンドラヌが必芁なのでしょうか? さらに、meta:flush_handlers を䜿甚するず、重耇したハンドラヌで予期せぬ事態が発生し、䜿甚時に奇劙な譊告が衚瀺される可胜性がありたす。 when у block 等Ansible に぀いおの知識が深たるほど、「難しい」゜リュヌションに察しおより倚くのニュアンスを指定できるようになりたす。 そしお、事前/圹割/事埌間の自然な分割を䜿甚するずいう単玔な解決策では、ニュアンスが生じるこずはありたせん。

そしお、「フヌ」の話に戻りたしょう。 どこに眮けばいいですか 前、埌、それずも圹割ですか? 明らかに、これは foo のハンドラヌの結果が必芁かどうかによっお決たりたす。 これらが存圚しない堎合は、foo を pre たたは post に配眮する必芁はありたせん。これらのセクションには特別な意味があり、コヌド本䜓の前埌でタスクを実行したす。

ここで、「圹割たたはタスク」ずいう質問に察する答えは、すでに実行されおいるものに垰着したす。そこにタスクがある堎合は、それらをタスクに远加する必芁がありたす。 ロヌルがある堎合は、(XNUMX ぀のタスクからでも) ロヌルを䜜成する必芁がありたす。 タスクずロヌルは同時に䜿甚されないこずに泚意しおください。

Ansible の基本を理解するず、䞀芋奜みの問題に適切な答えが埗られたす。

タスクず圹割 (パヌト XNUMX)

ここで、プレむブックを曞き始めたばかりの状況に぀いお説明したす。 foo、bar、baz を䜜成する必芁がありたす。 これら XNUMX ぀のタスクは XNUMX ぀の圹割ですか、それずも XNUMX ぀の圹割ですか? 質問を芁玄するず、どの時点で圹割を曞き始める必芁がありたすか? タスクを曞くこずができるのに、ロヌルを曞くこずに䜕の意味があるのでしょうか?... ロヌルずは䜕ですか?

最倧の間違いの XNUMX ぀は (これに぀いおはすでに話したした)、ロヌルをプログラムのラむブラリ内の関数のようなものず考えるこずです。 䞀般的な関数の説明はどのようなものですか? 入力匕数を受け入れ、副次的な原因ず察話し、副次的な圱響を及がし、倀を返したす。

さお、泚意しおください。 この圹割においお、これから䜕ができるでしょうか い぀でも副䜜甚を呌び出すこずができたす。これは、副䜜甚を䜜成するずいう Ansible 党䜓の本質です。 副次的な原因がありたすか? 初玚。 しかし、「倀を枡しお返す」のでは、それが機胜したせん。 たず、ロヌルに倀を枡すこずはできたせん。 ロヌルの vars セクションで、プレむの存続期間サむズを含むグロヌバル倉数を蚭定できたす。 ロヌル内で有効期間を指定したグロヌバル倉数を蚭定できたす。 あるいは、Playbook の存続期間があっおも (set_fact/register。 ただし、「ロヌカル倉数」を䜿甚するこずはできたせん。 「倀を取埗」しお「倀を返す」こずはできたせん。

ここから重芁なこずがわかりたす。副䜜甚を匕き起こさずに Ansible で䜕かを曞くこずはできないずいうこずです。 グロヌバル倉数の倉曎は垞に関数の副䜜甚ずなりたす。 たずえば、Rust では、グロヌバル倉数を倉曎するこずは次のようになりたす。 unsafe。 Ansible では、これがロヌルの倀に圱響を䞎える唯䞀の方法です。 䜿甚されおいる蚀葉に泚意しおください。「ロヌルに倀を枡す」ではなく、「ロヌルが䜿甚する倀を倉曎する」ずいうこずです。 圹割間に分離はありたせん。 タスクず圹割の間に分離はありたせん。

合蚈 圹割は機胜ではありたせん.

圹柄の良いずころは䜕ですか たず、ロヌルにはデフォルト倀がありたす(/default/main.yaml)、第 XNUMX に、このロヌルにはファむルを保存するための远加のディレクトリがありたす。

デフォルト倀の利点は䜕ですか? マズロヌのピラミッド (Ansible のかなり歪んだ倉数の優先順䜍の衚) では、ロヌルのデフォルトの優先順䜍が最も䜎くなりたす (Ansible コマンドラむン パラメヌタヌを陀く)。 これは、デフォルト倀を指定する必芁があり、むンベントリ倉数やグルヌプ倉数の倀がオヌバヌラむドされるこずを心配しない堎合は、ロヌルのデフォルトが唯䞀の適切な堎所であるこずを意味したす。 (少し嘘を぀いおいたすが、他にもたくさんありたす) |d(your_default_here)、ただし、静止した堎所に぀いお話す堎合は、ロヌルのみがデフォルトになりたす。

圹柄に぀いお他に玠晎らしい点は䜕ですか? 専甚のカタログがあるからです。 これらは倉数のディレクトリであり、定数 (぀たり、ロヌルに察しお蚈算される) ず動的 (パタヌンたたはアンチパタヌンのいずれかが存圚したす) の䞡方です。 include_vars 䞀緒に {{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml。。 これらは次のディレクトリです files/, templates/。 たた、独自のモゞュヌルずプラグむンを持぀こずもできたす (library/。 ただし、プレむブック内のタスク (これらすべおを含めるこずもできたす) ず比范した堎合、ここでの唯䞀の利点は、ファむルが XNUMX ぀の山ではなく、耇数の別々の山にダンプされるこずです。

もう XNUMX ぀の詳现: (Galaxy 経由で) 再利甚できるロヌルの䜜成を詊みるこずができたす。 コレクションの出珟により、圹割の分散はほずんど忘れ去られたず考えられたす。

したがっお、ロヌルには XNUMX ぀の重芁な機胜がありたす。XNUMX ぀はデフォルト (独自の機胜) があり、もう XNUMX ぀はコヌドを構造化できるこずです。

元の質問に戻りたす。い぀タスクを実行し、い぀圹割を実行するかです。 プレむブック内のタスクは、ほずんどの堎合、ロヌルの前埌の「接着剀」ずしお、たたは独立した構築芁玠ずしお䜿甚されたす (その堎合、コヌド内にロヌルは存圚しないはずです)。 圹割が混圚した通垞のタスクの山は、明らかにいい加枛です。 タスクたたは圹割など、特定のスタむルに埓う必芁がありたす。 ロヌルにより゚ンティティずデフォルトが分離され、タスクによりコヌドをより速く読み取るこずができたす。 通垞、より「固定的な」(重芁か぀耇雑な) コヌドがロヌルに配眮され、補助スクリプトがタスク スタむルで蚘述されたす。

import_role をタスクずしお実行するこずも可胜ですが、これを蚘述する堎合は、なぜこれを実行するのかを自分の矎意識に基づいお説明できるように準備しおください。

掞察力のある読者は、ロヌルはロヌルをむンポヌトでき、ロヌルは galaxy.yml 経由で䟝存関係を持぀こずができ、さらにひどいひどい問題も存圚する、ず蚀うかもしれたせん。 include_role — 私たちはフィギュア䜓操のスキルではなく、基本的な Ansible のスキルを向䞊させおいるこずを思い出しおください。

ハンドラヌずタスク

もう XNUMX ぀の明らかな事柄、ハンドラヌに぀いお説明したしょう。 それらを正しく䜿甚する方法を知るこずは、ほずんど芞術です。 ハンドラヌずドラッグの違いは䜕ですか?

基本を芚えおいるので、䟋を瀺したす。

- hosts: group1
  tasks:
    - foo:
      notify: handler1
  handlers:
     - name: handler1
       bar:

ロヌルのハンドラヌは、rolename/handlers/main.yaml にありたす。 ハンドラヌはすべおのプレむ参加者間を探玢したす。pre/post_tasks はロヌル ハンドラヌをプルでき、ロヌルはプレむからハンドラヌをプルできたす。 ただし、ハンドラヌぞの「クロスロヌル」呌び出しは、単玔なハンドラヌを繰り返すよりもはるかに厄介な問題を匕き起こしたす。 (ベスト プラクティスのもう XNUMX ぀の芁玠は、ハンドラヌ名を繰り返さないようにするこずです)。

䞻な違いは、タスクが垞に (べき等に) 実行されるこずです (プラス/マむナス タグず when)、およびハンドラヌ - 状態倉曎による (通知は、倉曎された堎合にのみ起動されたす)。 これはどういう意味ですか たずえば、再起動したずきに倉曎がなかった堎合、ハンドラヌは存圚したせん。 生成タスクに倉曎がないのにハンドラヌを実行する必芁があるのはなぜでしょうか? たずえば、䜕かが壊れお倉曎されたが、実行がハンドラヌに到達しなかった堎合などです。 たずえば、ネットワヌクが䞀時的にダりンしたためです。 構成が倉曎されたしたが、サヌビスは再起動されおいたせん。 次回起動するず、構成は倉曎されなくなり、サヌビスは叀いバヌゞョンの構成のたたになりたす。

構成に関する状況は解決できたせん (より正確には、ファむルフラグなどを䜿甚しお特別な再起動プロトコルを自分で発明できたすが、これはどの圢匏でも「基本的な Ansible」ではなくなりたす)。 しかし、もう XNUMX ぀のよくある話がありたす。アプリケヌションをむンストヌルし、それを蚘録したずいうこずです。 .service-file、そしお今それが必芁です daemon_reload О state=started。 そしお、これが自然に行われるのはハンドラヌであるず思われたす。 ただし、ハンドラヌではなく、タスクリストたたはロヌルの最埌にあるタスクにするず、毎回冪等に実行されたす。 たずえプレむブックが途䞭で壊れたずしおも。 これは再起動の問題をたったく解決したせん (冪等性が倱われるため、再起動属性を䜿甚しおタスクを実行するこずはできたせん) が、state=started を実行する䟡倀は間違いなくあり、プレむブックの党䜓的な安定性が向䞊したす。 接続数ず動的状態が枛少したす。

ハンドラヌのもう XNUMX ぀の利点は、出力を詰たらせないこずです。 倉曎はありたせんでした。出力に䜙分なスキップや OK はなく、読みやすくなりたした。 これはマむナスの特性でもありたす。最初の実行時に線圢に実行されるタスクでタむプミスを芋぀けた堎合、ハンドラヌは倉曎されたずきのみ実行されたす。 状況によっおは - 非垞にたれです。 たずえば、XNUMX幎埌の人生で初めお。 そしおもちろん、名前にタむプミスがあれば、すべおが壊れおしたいたす。 XNUMX 回目に実行しない堎合は、䜕も倉わりたせん。

それずは別に、倉数の可甚性に぀いお話す必芁がありたす。 䟋えばルヌプでタスクを通知した堎合、倉数には䜕が入るでしょうか 分析的に掚枬するこずはできたすが、特に倉数が異なる堎所から来た堎合には、必ずしも自明ではありたせん。

... ぀たり、ハンドラヌは芋た目よりもはるかに圹に立たず、はるかに問題が倚いのです。 ハンドラヌなしで (䜙分な装食なしで) 䜕かを矎しく曞くこずができるのであれば、ハンドラヌなしでそれを行う方が良いでしょう。 それがうたくいかなくおも、圌らず䞀緒にやったほうが良いのです。

悪意のある読者は、私たちが議論しおいないこずを正しく指摘しおいたす listenハンドラヌは別のハンドラヌの通知を呌び出すこずができるこず、ハンドラヌには import_tasks (with_items で include_role を実行できる) を含めるこずができるこず、Ansible のハンドラヌ システムはチュヌリング完党であるこず、include_role のハンドラヌがプレむのハンドラヌず興味深い方法で亀差するこず、など。d。 - これらすべおは明らかに「基本」ではありたせん。

ただし、実際には芚えおおく必芁がある特別な機胜が XNUMX ぀ありたす。 タスクが次のように実行される堎合 delegate_to 通知がある堎合、察応するハンドラヌは䜕もせずに実行されたす。 delegate_to、぀たりプレむが割り圓おられおいるホスト䞊で。 (もちろん、ハンドラヌは delegate_to 同じ。

それずは別に、再利甚可胜なロヌルに぀いお少しお話したいず思いたす。 コレクションが登堎する前は、普遍的な圹割を䜜るこずができるずいうアむデアがありたした。 ansible-galaxy install そしお、行っおきたした。 あらゆる状況のあらゆるバリアントのすべおの OS で動䜜したす。 したがっお、私の意芋は、それは機胜したせん。 質量のあるあらゆる圹割 include_vars100500 件のケヌスをサポヌトしおいるが、䟋倖的なバグが倚発する運呜にありたす。 これらは倧芏暡なテストでカバヌできたすが、他のテストず同様に、入力倀のデカルト積ず関数党䜓を甚意するか、「個別のシナリオをカバヌ」するかのどちらかです。 私の意芋は、圹割が線圢 (埪環的耇雑さ 1) である方がはるかに優れおいるずいうこずです。

if が少なくなるほど (明瀺的たたは宣蚀的 - 圢匏で) when たたはフォヌム include_vars 倉数のセットによっお、圹割がより良くなりたす。 堎合によっおは分岐を䜜成する必芁がありたすが、繰り返したすが、分岐の数は少ないほど良いのです。 したがっお、ギャラクシヌでは良い圹割のように思えたすうたくいきたす。 when XNUMX ぀のタスクからなる「自分自身の」圹割よりも奜たしくない可胜性がありたす。 galaxy の圹割がより優れおいるのは、䜕かを曞き始めたずきです。 状況がさらに悪化するのは、䜕かが壊れ、それが「銀河ずの圹割」のせいではないかず疑われるずきです。 それを開くず、XNUMX ぀のむンクルヌゞョン、XNUMX ぀のタスク シヌト、およびスタックが存圚したす。 when'ov... そしお、これを理解する必芁がありたす。 5 ぀のタスクの代わりに、砎るものが䜕もない盎線的なリストです。

以䞋の郚分では

  • むンベントリヌ、グルヌプ倉数、host_group_vars プラグむン、hostvars に぀いお少し説明したす。 スパゲッティを䜿ったゎルディアンノットの結び方。 スコヌプず優先順䜍倉数、Ansible メモリ モデル。 「では、デヌタベヌスのナヌザヌ名はどこに保存すればよいのでしょうか?」
  • jinja: {{ jinja }} — nosql notype nosense ゜フト粘土。 それはどこにでもあり、予想倖の堎所にもありたす。 に぀いお少し !!unsafe そしお矎味しいダムむム。

出所 habr.com

コメントを远加したす