update.※ちまたにあふれた記事を参考に適当にAnsibleを使っていると、なんでこのファイル構成だとうまくうごくの?とか細かい部分でいろいろと疑問が生じたため、一度しっかりリファレンスの読み解きをしようと思い、ゆっくりと翻訳を進めています。翻訳している間にも原文側の更新がけっこう発生しているみたいで、最新の原文とは内容が乖離している可能性があります。翻訳自体にも誤りがあるかもしれません。原文にどんなことが書いてあるのかを知るとっかかりとして、参考程度に見てください。原文なお、翻訳しているうちにわかってきたことは以下にまとめていってます。Ansibleまとめインストールガイド基本としてインストールされるものデフォルトのAnsibleはSSHプロトコルでマシン群を管理する。一度Ansibleがインストールされると、データベースは追加されず、起動・動き続けるデーモンはない。あなたは一台のマシン(ノートPCでもOK)のみにAnsibleをインストールすれば、中心点からリモートマシン全てを管理できる。リモートマシンをAnsibleで管理する場合、リモートマシン上にソフトウェアをインストールしたりする必要はない。Ansibleのバージョンアップ方法について質問はでないはずだ。どのバージョンを選択するか?ソースからとても簡単に動作し、リモートマシンへのソフトウェアインストールが必要ないため、多くの開発者は実際に開発バージョンを追跡する。Ansibleのリリースサイクルは、通常約4ヶ月。短いリリースサイクルのため、マイナーバグは通常、安定したブランチで互換性を維持しつつ次のリリースで修正される。メジャーバグは必要なときにメンテナンスリリースをするが、めったにない。Ansibleの最新バージョンを動作させたい&RedHat/CentOS/Fedora/Debian/Ubuntuを動作させているならば、OSパッケージマネージャー(rpm等)を使うことをおすすめする。他のインストールオプションについては、Pythonのパッケージマネージャである"pip"経由でのインストールをおすすめするが、他のオプションも利用できる。最新の機能を使うそしてテストするために開発リリースを追跡したいならば、我々はソースからの動作についての情報を共有する。ソースから実行するためにプログラムをインストールする必要はない。2.7)かPython3(3.5以上)がインストールされたマシン(Windowsはサポート対象外)で動作する。X,BSD系OSその他を含む。エラーを修正してくれる。**一部のモジュールとプラグインには追加要件があります。'ターゲット'マシンで満足する必要があり、モジュール固有のドキュメントにリストされている必要があります。管理対象ノードでは、通常はSSHで通信するための方法が必要である。デフォルトではAnsbleはSFTPを使う。SFTPが利用できないならば、ansible.cfgでscpに切り替えることができる。Python2.6以降も必要である。**注記**もしSELinuxがリモートのノードで有効ならば、Ansibleでいくつかのcopy,file,templateに関係する関数を使う前に、libselinux-pythonをインストールしたいと思うだろう。モジュールを使うことができる。**注記**デフォルトではAnsibleはRHEL6のような古いディストリビューションとの互換性を維持するためにAnsibleはPython2を使う。Gentoo,Arch等のいくつかのLinuxディストリビューションでは、デフォルトではPython2.X系のインタプリタがインストールされていない場合がある。これらのシステムでは、Python2.Xのインタプリタをインストールする必要があり、”ansible_python_interpreter”変数がインストールした2.X系Pythonを指すように設定する必要がある。デフォルトで2.Xインタープリターがインストールされているが、その他のディストリビューションには適用されない。全てのUnixシステムも同様に適用されない。適用外のリモートシステムにPython2.X系をインストールしつつ起動させたいならば、rawモジュールで遠隔操作でできる。Ansibleとそのモジュールを実行するために必要となるPython2.Xおよびsimplejsonモジュールをインストールするだろう。**我々はAnsibleコミュニティパッケージの配布方法を変更した。Linuxバージョン6向けの変更はない。channelから利用できる。RHEL6のRPMはEPEL6のyumから利用できる。現在Fedoraをサポートしている。AnbisleはRPM/YUMリポジトリもある。バージョン2.4はPython2.6以上を含むより簡単にOSを管理できる。あなたは、RPMを自身でビルドすることもできる。Apt経由での最新版のインストール(Ubuntu)(未翻訳)GitHub上のAnsibleあなたがGitHubアカウントを持っているならばGitHubプロジェクトの動向を知りたいと思うこともあるだろう。GitHubプロジェクトはバグや機能のアイディアを共有するための課題トラッカーを補完する場所でもある。設定ファイルAnsibleのある設定は設定ファイル(ansible.cfg)経由で調整できる。ストック設定はほとんどのユーザーにとって十分なはずだが、それらを変更したいと思うこともあるかもしれない。ファイルが/etc/ansibleに存在するはず。更新時に適切な.rpmnewファイルとして存在するはず。"pip"かソースからインストールした場合、Ansibleのデフォルト設定を書き換えるためにあなたはこのファイル(最新のansible.cfgか?)を作成したいと思うだろう。GitHubにあるサンプルansible.cfgへのリンクさらなる詳細や利用できる全ての設定一覧はconfigulation_setingsを参照せよ。ユーティリティを使うことができる。現在のAnsilbe設定値の参照を参照してください。環境設定また、環境変数を使用して設定を行うこともできます。これらの環境変数が設定されていれば、設定ファイルからロードされた設定を上書きします。構成設定から取得できます。コマンドラインオプションすべての設定オプションがコマンドラインに存在するわけではなく、もっとも有用、もしくは共通であると思われる設定オプションだけです。コマンドラインでの設定は、設定ファイルと環境で渡された設定を上書きします。利用可能なオプションの完全なリストは以下のリンクにある。ansibleAnsible移行ガイドこのセクションはあなたのplaybook、プラグイン、その他をあるバージョンのAnsibleから次バージョンのAnsibleへ移行するのに役立つガイドを一覧表示したもの。完全なリストではないことに注意せよ。GitHubをクリックして編集・もしくは問題を提起できる。Quickstart我々はAnsibleを紹介する短いビデオを録画しました。その機能と使い方を紹介しています。Ansibleエコシステムの他の製品についてもお伝えします。お楽しみにして、残りのドキュメントを参照して詳細を確認してください。始める序文あなたはインストールガイドを読んでAnsibleをインストールしました。いくつかの特別なコマンドを使ってみましょう。私たちが最初に示しているのは、Ansibleの強力な構成/展開/オーケストレーションの機能ではありません。これらの機能は別のセクションで説明されているplaybookで処理されます。このセクションでは、最初にAnsibleを起動する方法について説明します。これらの概念を理解したら、アドホックコマンドの紹介を読んでください。playbookの学習を始める準備ができています。リモート接続情報まずはSSH経由でAnsibleがリモートマシンと通信する方法を理解することが重要です。デフォルトでAnsibleは可能ならばにリモート通信にネイティブなOpenSSHを使用しようとします。これによりControlPersist(パフォーマンス機能)、ケルベロス認証、そして踏み台設定などの~/.ssh/config内のオプションが有効になります。LinuxおよびCentOSなどの派生製品)として使用する場合、OpenSSHのバージョンはControlPersistをサポートするには古すぎるかもしれません。'paramiko'と呼ばれるOpenSSHの高品質なPython実装の使用を代替手段とする。X、またはUbuntuを管理マシンとして使用することを検討してください。SFTPをサポートしていないデバイスがあることがあります。そのようなケースはレアですが、発生した場合は、「Ansibleを設定する」の項目にあったようにSCPモードに切り替えることができます。リモートマシンと通信するとき、AnsibleはデフォルトでSSH鍵を使用していると仮定します。SSHキーが推奨されていますが、必要に応じて--ask-passオプションを指定してパスワード認証を使用することもできます。sudo機能を使っており、なおかつsudoがパスワードを必要とする場合は、--ask-become-pass(以前の--ask-sudo-passは廃止されています)を指定してください。常識かもしれませんが、共有する価値がある:すべての管理システムは、ネットワーク的に管理対象マシンの近くで実行することで利益を得る。あなたがクラウド内でAnsibleを実行している場合は、そのクラウド内のマシンから実行することを検討してください。ほとんどの場合、これはオープンインターネットよりも高速になります。先進的な話題として、AnsibleはSSH経由で遠隔接続するだけではない。トランスポートは接続可能であり、ローカルでの管理やchroot、lxc、jailコンテナの管理などのオプションがあります。checkouts経由でシステムの電話機をホームディレクトリに置くこともできます。あなたの最初のコマンドあなたがAnsibleをインストールしたので、いくつかの基本から始めましょう。/etc/ansible/hostsを編集(または作成)して、そこに1つまたは複数のリモートシステムを書きなさい。192.0.2.50aserver.example.orgbserver.example.org上記はインベントリファイルで、深い説明はこちらなお、あなたの管理サーバの公開鍵は、インベントリファイルに記載したリモートシステムのauthorized_keysに書く必要があります我々はあなたが認証にSSH鍵を使っていると仮定する。~/.ssh/id_rsa(あなたの設定によってはpemファイルを指定するAnsibleの--private-keyオプションを使いたいかもしれません。pingSSHがそうするようにAnsibleは現在のあなたのユーザー名を使ってマシンにリモート接続しようとします。リモートユーザー名を上書きしたいならば-uパラメータを使いなさい。sudoモードでアクセスしたい場合のフラグは以下の通り。)次に、すべてのノードでライブコマンドを実行します。hello"おめでとう!あなたはAnsibleであなたのノードに接触した。次はAd-Hocコマンド、異なるモジュールでできることの探求、Playbooks言語を使ったAnsible操作についての学習、の紹介を通して実際のケースについて読みましょう。Ansibleはコマンドの実行だけでなく、強力な構成管理とデプロイ機能も備えています。探求すべきことはもうたくさんありますが、すでに十分に機能しているインフラがあります。``127.0.0.1``を使うことでローカルのサーバーを指定できる。python"'インベントリファイルへ以下を追加することによって明確にローカルホストを指定できる。pythonホストキーチェックAnsibleは、デフォルトでホストキーチェックが有効になっている。known_hostsに異なるキーがある場合、修正するまでエラーメッセージが表示されます。'known_hosts'にない場合、これはキーの確認を促す結果となり、Ansibleを使用している場合はcronという対話形式のエクスペリエンスが得られます。あなたはこれを望まないかもしれません。あなたがその意義を理解し、このふるまいを望まないならば、/etc/ansible/ansible.cfgや~/.ansible.cfgを編集することで無効にできる。False代わりにこれはANSIBLE_HOST_KEY_CHECKING環境変数で設定することもできます。'ssh'に切り替えることもお勧めします。Ansibleは、taskまたはplayに「no_log:True」属性が設定されていない限り、リモートsyslogのリモートシステム上のモジュール引数に関する情報をログに記録します。これについては後で説明します。コントロールマシンで基本ログを有効にするには、Ansible設定ドキュメントを参照し、「log_path」設定ファイルの設定を設定してください。Towerに興味があるかもしれません。タワーは非常に堅牢なデータベースロギング機能を備えており、ホスト、プロジェクト、および特定のインベントリに基づいて履歴をドリルダウンして表示することができます。APIでも探索できます。コマンドラインツールで動かすほとんどのユーザーはansibleとansible-plaoybookをよく知っているが、これらだけがAnsibleが提供するユーティリティではない。以下は、完全なAnsibleユーティリティの一覧である。それぞれのページはユーティリティの説明とサポートされるパラメータの一覧を含む。ansibleansible-configansible-consoleansible-docansible-galaxyansible-inventoryansible-playbookansible-pullansible-vaultansibleホストのセットに対して単一タスクの"Playbook"を定義して実行。遠隔操作をするための超シンプルなツール/フレームワーク/APIである。このコマンドであなたはホストのセットに対して単一のplaybookタスクを定義して実行できる。以下の環境変数を指定できる。デフォルトのAnsible設定ファイルを上書きする。内のほとんどのオプションで利用できる。存在する場合に使用される。存在する場合にデフォルト設定を上書きする。DeHaanによって書かれた。完全な投稿者の一覧を見るにはAUTHORSファイルを参照。ansible-vault(1),ansible-configAnsible設定を閲覧、編集、管理する。説明コマンドラインクラスを設定する。共通オプション動作listlib/constants.pyを読み込んで全ての共通設定を一覧表示し、環境そして設定ファイル設定名を表示する。dump指定されたansible.cfgをマージした現在の設定を表示する。デフォルトから変化した設定のみを表示する。view現在の設定ファイルを表示する。以下の環境変数を指定できる。デフォルトのAnsible設定ファイルを上書きする。内のほとんどのオプションで利用できる。存在する場合に使用される。存在する場合にデフォルト設定を上書きする。DeHaanによって書かれた。完全な投稿者の一覧を見るにはAUTHORSファイルを参照。以下の環境変数を指定できる。デフォルトのAnsible設定ファイルを上書きする。内のほとんどのオプションで利用できる。存在する場合に使用される。存在する場合にデフォルト設定を上書きする。DeHaanによって書かれた。完全な投稿者の一覧を見るにはAUTHORSファイルを参照。[plugin]説明Ansibleライブラリにインストールされているモジュールに関する情報を表示します。これは、プラグインの簡潔なリストとその短い説明を表示し、DOCUMENTATION文字列のプリントアウトを提供し、短い「スニペット」を作成して、playbookに貼り付けることができます。以下の環境変数を指定できる。デフォルトのAnsible設定ファイルを上書きする。内のほとんどのオプションで利用できる。存在する場合に使用される。存在する場合にデフォルト設定を上書きする。DeHaanによって書かれた。完全な投稿者の一覧を見るにはAUTHORSファイルを参照。共有リポジトリ内のAnsibleロールを管理する。(https://galaxy.ansible.com.)である。以下の環境変数を指定できる。デフォルトのAnsible設定ファイルを上書きする。内のほとんどのオプションで利用できる。存在する場合に使用される。存在する場合にデフォルト設定を上書きする。DeHaanによって書かれた。完全な投稿者の一覧を見るにはAUTHORSファイルを参照。[host|group]説明Ansibleが見るような形で設定されたインベントリを表示またはダンプするために使われる。以下の環境変数を指定できる。デフォルトのAnsible設定ファイルを上書きする。内のほとんどのオプションで利用できる。存在する場合に使用される。存在する場合にデフォルト設定を上書きする。DeHaanによって書かれた。完全な投稿者の一覧を見るにはAUTHORSファイルを参照。playbook群を実行する。playbook群を実行するための設定システム、複数ノードデプロイシステムであるツール。詳細についてはプロジェクトのホームページを参照(https://docs.ansible.com)。以下の環境変数を指定できる。デフォルトのAnsible設定ファイルを上書きする。内のほとんどのオプションで利用できる。存在する場合に使用される。存在する場合にデフォルト設定を上書きする。DeHaanによって書かれた。完全な投稿者の一覧を見るにはAUTHORSファイルを参照。[<playbook.yml>]説明それぞれの管理対象ノード上のAnsibleのリモートコピーに使われる。それぞれはクーロンを介して実行され、リポジトリ経由でplaybookソースを更新する。これはデフォルトのpush型のAnsibleアーキテクチャがほぼ無限のスケーリングポテンシャルをもつプル型のアーキテクチャに反転する。playbookのセットアップはcronの頻度、ロギングの場所、パラメータをansible-pullへ変更するためのチューニングされうる。これは極端なスケールアウトと定期的な修復の両方に役立つ。フェッチモジュールを使用して、ansible-pullからログを取得することはansible-pullからリモートログを収集・分析する優れた方法です。以下の環境変数を指定できる。デフォルトのAnsible設定ファイルを上書きする。内のほとんどのオプションで利用できる。存在する場合に使用される。存在する場合にデフォルト設定を上書きする。DeHaanによって書かれた。完全な投稿者の一覧を見るにはAUTHORSファイルを参照。[vaultfile.yml]説明Ansibleが使用する構造化データファイルを暗号化できる。伴うansible-playbookコマンドラインで渡される変数ファイルを含むことができる。ロール変数とデフォルト変数もまた含まれる。Ansibleのtask群、handler群、他のオブジェクトはデータであるため、これらはvaultで暗号化できる。使用している変数を公開したくないならば、個々のタスクファイルを完全に暗号化したままにすることもできる。vaultで使用されるパスワードは同時に使用する全てのファイルで同じでなければならない。以下の環境変数を指定できる。デフォルトのAnsible設定ファイルを上書きする。内のほとんどのオプションで利用できる。存在する場合に使用される。存在する場合にデフォルト設定を上書きする。DeHaanによって書かれた。完全な投稿者の一覧を見るにはAUTHORSファイルを参照。hocタスクを実行するために/usr/bin/ansibleを使うための方法を示す。ad-hocコマンドとは何か?ad-hocコマンドは、何かをすばやく実行するために入力するが、あとで保存したくないものである。これは、Ansibleがplaybook言語を学ぶ前にできることの基礎を理解するのに適している。ad-hocコマンドは完全なplaybookを書く必要がないものを迅速に実行するために使える。一般的に言うと、Ansibleの真のパワーはplaybookに存在する。アドホックタスク群とplaybook群の違いは何か?例えば、クリスマス休暇にあなたのラボの電源を切りたいならば、あなたはplaybookを書くことなくAnsibleで迅速な1行実行ができる。構成管理とデプロイのために、しかし、あなたは"/usr/bin/ansible-playbook"を使いこなしたいと思うだろう。あなたがここで学ぶコンセプトはplaybook言語に直接移植できる。(それらについてより多くの情報はplaybookを使って動かすを参照)もしあなたはすでにインベントリを使って動かすを見ているならば、少し先にそれを見てから行くだろう。(以下未翻訳)インベントリを使って動かすAnsibleはあなたのインフラ内の複数のシステムに対して同時に動作します。これは、デフォルトで/etc/ansible/hostsの場所に保存されるAnsibleのインベントリに一覧化されているシステムの一部を選択することによって行われます。<path>オプションを使用すると、別のインベントリファイルを指定できます。このインベントリは設定可能なだけでなく、複数のインベントリファイルを同時に使用し、ダイナミックまたはクラウドソースまたは異なるフォーマット(YAML、iniなど)からインベントリを取得することもできます(「ダイナミックインベントリの処理」を参照)。バージョン2.4で導入されたAnsibleは、これを柔軟かつカスタマイズ可能にするためのインベントリプラグインを持っています。ホスト群とグループ群インベントリファイルはあなたが持つインベントリプラグインに依存する多くのフォーマットの一つになりうる。/etc/ansible/hostsのフォーマットの例はINIライクで次のようになる。mail.example.com[webservers]foo.example.combar.example.com[dbservers]one.example.comtwo.example.comthree.example.com角括弧内の見出しはグループ名で、システムの分類やあなたがいつ、なんの目的でコントロールするシステムであるかを決定する。YAMLバージョンは次のようになる。three.example.com:システムを複数のグループに配置してもOKである。サーバーはwebサーバーとDBサーバーの両方になる可能性がある。した場合、変数群は所属する全てのグループのものが適用されることに注意しなさい。変数の優先順位は後のチャプターで詳しく説明する。非標準のSSHポートで動作するホストがある場合は、コロンでホスト名の後にポート番号を配置できる。SSH設定ファイルで一覧化されるポート群はparamiko接続では使われないが、OpenSSH接続で使われる。物事を明示化するために、デフォルトポートで実行されていない場合に設定することをおすすめする。badwolf.example.com:5309静的IP群だけを持っており、ホストファイルにいくつかのエイリアスを設定したいまたはトンネル経由での接続をしているとする。あなたは変数を経由してホストを記述できる。192.0.2.50上記の例では、ホストエイリアス"jumper"(本当のホスト名ではないかも)に対してAnsibleを試みると、ポート5555の192.0.2.50に連絡する。いくつかの特別な変数を定義するためのインベントリファイルの機能を利用することに注意しろ。一般的にいえばシステムポリシーを記述する変数を定義するためのこれは最善の方法ではない。value構文を使用してINI形式で渡される値は、Pythonリテラル構造(文字列、数値、タプル、リスト、辞書、ブール値、なし)として解釈されるのではなく、文字列として解釈されます。'FALSE'に等しい文字列を作成します。定義時に設定された型に頼らないで、変数を消費するときに必要なときに必ずフィルターを使用して型を指定するようにしてください。似通ったパターンで多くのホストを追加する場合は、それぞれのホスト名を一覧化することなく次のようにできる。[webservers]www[01:50].example.com数値のパターンの場合、必要に応じて先行ゼロを含めたり削除したりできる。アルファベットの範囲も適宜できる。[databases]db-[a:f].example.comホスト毎に接続タイプとユーザーを割り当てることもできる。ansible_user=mdehaan上述した通り、これらをインベントリファイルに設定することはちょっとしたことであり、後ほどhost_varsディレクトリで個々のファイルにそれらを格納する方法について説明する。上述した通り、ホスト群に対する変数群を割り当てることは以下のplaybookで簡単にできる。変数は一度にグループ全体に適用することもできる。proxy.atlanta.example.comこれは一度に複数のホストに変数を適用するための便利な方法であるだけなことに注意しろ。グループ毎のホスト群をターゲットにできるが、変数群は常にplayが実行される前にホストレベルにフラット化される。グループ群のグループ群とグループ変数INIの:children接尾後またはYAMLのchildren:接頭語を使ってグループ群のグループ群を作ることもできる。あなたは:varsまたはvars:を使って変数を適用できる。southwest:リスト(配列)やハッシュデータ(連想配列)を格納する必要がある場合や、ホストとグループ固有の変数をインベントリファイルとは別に保存する場合は、次のセクションを参照してください。子グループには、いくつかの注意すべきプロパティがあります。子グループに所属するホストは、自動的に親グループにも所属します。子グループの変数は、親グループの変数を上書きするでしょう。グループには複数の親と子が含まれますが、循環関係はありません。ホストは複数のグループに所属することもできますが、ホストのインスタンスは1つしかなく、複数のグループのデータをマージします。ungroupedという2つのデフォルトグループがある。allは全てのホストを意味するグループ。ungroupedはグループに所属しない全てのホストを意味するグループ。全てのhostは常に少なくとも2つのグループに所属する。ungroupedは常に存在するが、それらは暗黙的であり、group_namesのようなグループリストには表示されない。ホストとグループ固有のデータの分割Ansibleの好ましいプラクティスは、メインのインベントリファイルに変数を保存しないことである。インベントリファイルに直接変数を格納することに加え、ホストとグループ変数はインベントリファイルに関係する個々のファイルへ格納できる。これらの変数ファイルはYAML形式である。YAMLを初めて使用する場合はYAML構文を参照せよ。想定するインベントリファイルのパスは以下の通り。/etc/ansible/hostsホスト名が"foosball"、グループ名が"raleigh"と"webservers"である場合、次の場所のYAMLファイル内の変数がホストに対して適用される。/etc/ansible/group_vars/webservers/etc/ansible/host_vars/foosball例えば、DC毎にグループ化されたホスト群があり、それぞれのDCで異なるサーバーを使っていると仮定する。raleighグループに対応するグループファイル"/etc/ansible/group_vars"内のデータは次のようになる。storage.example.orgこれはオプション機能であるため、これらのファイルが存在しなくてもよい。高度なユースケースとして、あなたはあなたのグループ群やホスト群の名前のディレクトリを作成することができ、Ansibleはそれらのディレクトリ内のファイルを辞書順に読み込む。"raleigh"グループの例:/etc/ansible/group_vars/raleigh/db_settings/etc/ansible/group_vars/raleigh/cluster_settings'raleigh'グループに属するすべてのホストは、これらのファイルで定義された変数を使用できます。Vaultを使用するときに、変数を整理しておくのに非常に便利です。**``group_vars/``および``host_vars/``ディレクトリは、playbookディレクトリまたはインベントリディレクトリに存在できます。両方のパスが存在する場合、playbookディレクトリの変数は、インベントリディレクトリに設定された変数を上書きします。**インベントリファイルと変数をgit(やその他VCS)リポジトリに保存することはインベントリとホスト変数の変更を追跡する優れた方法である。どのように変数がマージされるかデフォルトでは、playが実行される前に変数が特定のホストへマージされ、フラット化される。これにより、Ansibleはホストとタスクに重点を置いたままになります。そのため、グループ群はインベントリとホストの突き合わせを除いて苦労することはありません。デフォルトでは、Ansibleはグループやホストに対して定義された変数を上書きします(これを変更するにはhash_mergeの設定を参照してください)。グループ親グループ子グループホスト同じ親/子のレベルのグループのマージはアルファベット順に行われる。ロードされた最新のグループは以前のグループを上書きする。a_groupはb_groupとマージされ、同じ名前の変数についてはb_groupのものが採用される。バージョン2.4の新機能Ansibleバージョン2.4から、ユーザーはグループ変数ansible_group_priorityを使用して、同じレベルのグループ(親/子オーダが解決された後)のマージ順序を変更できます。番号が大きいほど後でマージされ、優先度が高くなります。この変数は、設定されていない場合、デフォルトで1になります。ふるまいに関するインベントリパラメータの一覧(未翻訳)SSHでない接続タイプ(未翻訳)ダイナミックインベントリを使って動かす(未翻訳)Playbookを使って動かすPlaybookは、Ansibleの構成、デプロイ、およびオーケストレーション言語です。Playbookにはリモートシステム群に対して強制したいポリシーや、または一般的なITプロセスの一連のステップを記述できます。Ansibleモジュールがあなたの工場におけるツールと例えるならば、playbookはあなたの取り扱い説明書であり、あなたのホスト群のインベントリは原材料です。基本的なレベルでは、playbookはリモートマシンの構成やデプロイを管理できます。高度なレベルでは、ローリング更新を含む複数層のロールアウトをシーケンスでき、他のホストにアクションを委任し、途中で監視サーバーやロードバランサとやりとりすることができます。ここにはたくさんの情報がありますが、一度にすべてを学ぶ必要はありません。小規模から始めて、必要に応じてさらに多くの機能を拾うことができます。playbookは人間が読めるように設計されており、基本的なテキスト言語で開発されています。playbookとその中に含まれるファイルを整理する方法はいくつかありますが、その中でいくつかの提案を行い、Ansibleを最大限に活用していきます。あなたは、playbookのドキュメントを読む間に、playbook例を見てください。これらはさまざまなコンセプトの多くを一緒にする方法と同様にベストプラクティスを説明する。playbookの出だしplaybookについてplaybookは、アドホックタスク実行モードとはまったく異なる使い方をしており、特別に強力です。簡単に言えば、playbookは、既存のものとは違って、本当にシンプルな構成管理とマルチマシンデプロイシステムの基盤であり、複雑なアプリケーションをデプロイするのに非常に適しています。Playbookは設定を宣言することができますが、手動で順序づけられるプロセスのステップを調整することもできます。異なるステップは特定の順番のマシンセット間を行き来する必要があります。タスクを同期または非同期で起動できます。あなたはアドホックなタスクのために主な/usr/bin/ansibleプログラムを実行するかもしれませんが、playbookはソース管理で保持され、設定をプッシュアウトしたり、リモートシステムの設定が仕様どおりであることを保証します。いくつかのフルセットのplaybookが、これらのテクニックの多くをアシスタントサンプルリポジトリに示しています。私たちは別のタブでこれらを調べることをお勧めします。あなたがplaybookを学んだ後にも多くのジャンプポイントがありますので、このセクションで作業が終わったらドキュメントインデックスに戻ってください。playbook言語例(未翻訳)基本(未翻訳)アクションの表現バージョン0.8の新機能Ansibleは次のような一覧化するモジュールを好む。/etc/foo.conf古いバージョンでは、次の形式が採用されていた。dest=/etc/foo.confハンドラ:変化時の実行操作(未翻訳)playbookの実行playbookの構文を学んだが、どのようにplaybookを実行すればよいか?それは単純である。並列性レベル10でplaybookを実行してみよう。10Ansible-PullAnsibleのアーキテクチャを反転させたいならば、ノードが中央へチェックインできるように、ノードに設定を転送する代わりに、あなたはできる。ansible-pullはgitから設定指示のリポジトリをチェックアウトし、その内容に対してansible-playbookを実行する小さなスクリプトです。あなたがチェックアウト場所の負荷を分散すると仮定すると、ansible-pullは本質的に無限に広がります。--helpを実行してください。プッシュモードからのcrontab経由でansible-pullを構成するための巧妙なplaybookもあります。ヒントとコツplaybookのシンタックスをチェックするには、--syntax-checkフラグと一緒にansible-playbookを使え。これにより、パーサーを介してplaybookファイルが実行され、インクルードされるファイルやロールなどに構文上の問題がないことが保証されます。playbookの実行の最後に、ターゲットとされたノードとそれらの実行結果の概要が表示されます。一般的な失敗や致命的な"unreachable"通信の試行は、カウントで分けられます。成功したモジュールと失敗したモジュールの詳細な出力を見たい場合は、--verboseフラグを使用してください。0.5以降で利用可能です。playbookの実行対象ホストを確認するには、次のコマンドを実行。--list-hosts再利用可能なplaybookの作成playbookを1つの非常に大きなファイルに書き込むことは可能ですが(この方法でplaybookを学習することもできます)、最終的にはファイルを再利用して物事を整理することになります。Ansibleでは、これを行うための3つの方法があります:インクルード、インポート、ロール。IncludesとImports(Ansibleバージョン2.4で追加)により、大規模なplaybookを複数の親playbookにまたは同じplaybook内で複数回使用できる小さなファイルに分割することができます。ロールを使用すると、タスクだけでなく、変数、ハンドラ、さらにはモジュールやその他のプラグインを含めることができます。Galaxyを介してアップロードして共有することもできます。インポート再利用可能なPlaybookの作成で説明したように、include文とimport文は非常によく似ていますが、Ansible実行エンジンは全く異なる方法で扱います。すべてのimport*文は、playbookが解析されるときに前処理されます。すべてのinclude*文は、playbookの実行中に遭遇したときに処理されます。それぞれのトレードオフについては、再利用可能なplaybookの作成を参照してください。2.4でふるまいが変更されたことに注意しなさい。以前のAnsibleバージョンではincludeのみが利用でき、文脈に依存して違ったふるまいをしていた。Playbookのインポートマスターplaybook内部にplaybook群を含めることが可能である。databases.ymlリストされた各playbook内のplay群、task群はここに直接定義されたようにリストされた順に実行される。バージョン2.4以前では、includeだけが利用でき、playbookとtask両方に対して使用できた。taskファイルのインクルードとインポート含まれるtaskリストの使用はシステムが果たす役割を定義することができます。使用して、このファイルをメインのタスクリストに含める(以下)ことができます。common_tasks.ymlimport、include時に変数を渡すこともできます。bob変数は、辞書やリストなどの構造化変数もサポートする別の構文を使用してインクルードファイルに渡すこともできます。}}"いずれの構文を使用しても、渡された変数はインクルードされたファイルで使用できます。これらの変数は、インクルードされたファイル内のタスクでのみ使用できます。変数の継承と優先順位の詳細については、変数の優先順位:変数はどこに置くべきですか?を参照してください。taskのinclude文は任意の深さで使用できます。**静的と動的を混在させることはできますが、これはあなたのplaybookには診断が困難なバグにつながる可能性があるため、これはお勧めしませんインクルードとインポートは、handlers:セクションでも使用できます。Apacheを再起動する方法を定義する場合は、すべてのplaybookで一度だけ実行する必要があります。**[再利用可能なplaybookを作成する](http://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse.html)に記載されているハンドラの制限/トレードオフを参照してください。ロールのインクルードとインポートロールの追加とインポートの詳細については、ロールを参照してください。ロールバージョン1.2の新機能roleは、特定のvars_files、tasks、およびhandlersを既知のファイル構造に基づいて自動的にロードする方法です。ロールでコンテンツをグループ化すると、他のユーザーと簡単にロールを共有することもできます。meta/ロールはファイルが特定の名前のディレクトリ内にあることを期待する。ロールはこれらのディレクトリの少なくとも1つが含まれていなければならないが使用されていないディレクトリは除外することができる。使用時には、各ディレクトリに、関連する内容を含むmain.ymlファイルが含まれている必要があります。このroleのためのメタデータを定義する。その他のYAMLファイルが特定のディレクトリに含まれることがある。tasks/main.ymlファイルからインクルードされるプラットフォーム固有のtaskをもつことが一般的に行われる。presentroleはモジュールや他のプラグイン型をインクルードするかもしれない。詳細はモジュールとプラグインをロールに埋め込むを参照。静的Aniableには、動的コンテンツと静的コンテンツを再利用可能にするための2つの操作モードがあります。2.0で、"動的インクルード"の概念が導入されました。この方法で全てのインクルードを動的にすることにはいくつかの制限があるため、強制的にインクルードを静的にする機能がAnsible2.1で導入されました。タスクのインクルードは、静的な構文と動的な構文両方を含むようにオーバーロードされ、デフォルトのインクルードのふるまいがそのタスクに設定されたオプションに基づいて変更される可能性があるため、Ansible2.4ではinclude対importの概念を導入している。import_tasks,等)を使うならば静的になるだろう。等)を使うならば動的になるだろう。ただのincludeタスク(taskのみがかかれたファイルのインクルードとPlaybookレベルのファイルのインクルード両方で使われる)はまだ利用できるが、廃止予定である。AnsibleはPlaybook解析時に全ての「静的」なインポートを前処理する。「動的」なインクルードは実行中にそのタスクに遭遇した際に処理される。「静的」なインポートの場合、親タスクのオプションはインポートする全ての子タスクへコピーされる。「動的」なインクルードの場合、タスクのオプションは評価されるときに動的なタスクにのみ適用され、子タスクへはコピーされない。**ロールはやや特別なケースである。Ansible2.3より前のバージョンでは、ロールは常にplay領域で付与される特別なオプション``roles:``を使って静的にインクルードされ、常に他のplayタスクに先駆けて最初に実行されていた(``pre_tasks``が使われていないならば)。ロールはまだこの方法で使用できるが、Ansible2.3でロールが他のタスクに埋め込んで実行される``include_role``オプションが導入された。インクルードとインポートの間のトレードオフと落とし穴include*とimport*の使用はユーザーがそれぞれの使用を選択する際に考慮すべきいくつかの利点といくつかのトレードオフがあります。include*文を使用する主な利点はループである。インクルードと一緒にループが使われるとき、インクルードされるタスクやロールはループ内のそれぞれの項目にで対して一度実行される。include*の使用はimport*と比較するといくつかの制限がある。「動的」なインクルード内にのみ存在するタグは--list-tags出力にあらわれてこない。「動的」なインクルード内にのみ存在するタスクは--list-taks出力にあらわれてこない。「動的」なインクルードから来るハンドラ名をトリガにnotifyを使用することができない。「動的」なインクルード内のタスクで実行を始めるための--start-at-taskを使用することができない。import*の使用も「動的な」インクルードと比較するといくつかの制限がある。上記のように、インポートと一緒にループを使うことがまったくできない。ターゲットファイルまたはロール名に変数を使用する時、インベントリのソース(host変数、group変数など)の変数は使用できない。**動的なタスクに``notify``を使用することについて、「動的」なインクルード自体をトリガとすることはまだ可能であり、インクルードしている全てのタスクが実行されることになる。自動化はものごとを簡単に繰り返せるようにするために存在するが、おそらく、あなたのシステムの全てが瓜二つというわけではない。監視しているリモートシステムのふるまいや状態のいくつかが、それらのシステムを構成する方法に影響を与えるという動作を必要とするかもしれない(例えば、システムのIPアドレスを調査し、別のシステムの構成値として使用するなど)。ほとんど同じだがそれらの変数に基づいて若干異なる構成ファイルのためのいくつかのテンプレートをあなたは持っているかもしれない。Ansibleの変数はシステム間の際を我々が扱う方法である。変数を理解するために、あなたは条件とループを掘り下げたくなるだろう。group_byモジュールとwhen条件はシステム間の差異を管理するために、変数と一緒にも使われる。GitHubリポジトリを参照することを強くおすすめする。ベストプラクティスのアドバイスについては、章"ベストプラクティス"内の変数とVaultを参照しろ。有効な変数名とは変数を使い始める前に、何が有効な変数名なのかを知ることが重要である。利用できる名前は文字、数字、そしてアンダースコアである。変数は常に文字からはじまらなければならない。foo_portは有効な変数である。有効な変数名ではない。YAMLはキーと値の辞書(=マップ,連想配列)もサポートする。twoカッコ記法またはドット記法を使って辞書の特定のフィールドを参照することができます。foo['field1']foo.field1これらは両方とも同じ値("one")を参照する。ドット記法の使用を選択するならば、pythonで使われる辞書の属性名やメソッド名と衝突するようなキーでは問題が発生するかもしれない。先頭または末尾に2つのアンダースコア(これらはpythonにおいて特別な意味を持つ)がつくキーや既知のパブリック属性のキーを使うならば、ドット記法の代わりにカッコ記法をつかうべき。我々はすでに、別の章で変数について多くを扱っているが、これまでのところめちゃくちゃ新しいものではなく、すこし再学習している形だ。多くの場合、あなたはマシンがどのグループ内にあるかに基づいて変数を設定したいと思うだろう。ボストンにあるマシンはNTPサーバーとして"boston.ntp.example.com"を使いたいとする。インベントリで変数を定義する複数の方法についてはインベントリを使って動かすのドキュメントを参照しろ。Playbook内で定義された変数playbook内で、以下のようにインラインで直接変数を定義することが可能である。80playbookを読んでいるときに出てくることになるため、これは親切であるかもしれない。結局我々は別の場所ですでに変数について話していたことがわかる。ロールで述べたように、変数はインクルードファイル経由でplaybookでインクルードされることもある。Role"の一部かもしれないしそうではないかもしれない。ロールの使用は組織的なシステムを提供するため好ましい。変数の使用:Jinja2について変数を定義する方法については十分わかったと思うが、それらをどのように使えばいいのか?AnsibleではJinja2テンプレートシステムを使用するplaybook内で変数を参照できる。Jinjaでは多くの複雑なことができるが、最初に本当に学ぶべきは基本のみである。単純なテンプレートでは、あなたは以下のようにできる。}}上記は変数置換の最も基本の形である。これはplaybook内でも有効であり、時には以下のようなことをしたいこともあるだろう。上記の例では、ファイルの設置場所を決定する変数を使用した。テンプレート内で、あなたはホストのスコープ内にある全ての変数へ自動的にアクセスできる。あなたは他のホストに対する変数も読み込むことができる。その方法をお見せしよう。**注記**Ansibleではjinja2でループと条件分岐をテンプレート内でつかうことができるが、playbookではそれらを使うことができない。Playbookは純粋な機械的に解釈できるYAMLである。これは非常に重要な機能であり、ファイルのコードを生成したり、他のエコシステムツールにAnsibleファイルを読みこませることができる。誰もがこれを必要とするわけではないが、可能性がある機能である。Jinja2フィルター**注記**これらはあまり利用されない機能である。あなたのユースケースにフィットするならば、使ってください。これはオプション的な知識になります。}}ではじまる値が使えないので、値の箇所全体を引用(""で囲む)必要がある。これはYAML構文ドキュメントで説明されている。}}/22"システムから発見される情報:Facts変数が出てくる場所は他にもあるが、これら発見される変数の一種であり、ユーザーが設定するものではない。Factsはあなたのリモートシステムとの対話で得られた情報である。これは例えばリモートホストのIPアドレスや、OSが何であるかといったものである。setup以下はUbuntu12.04システムでAnsible1.4を実行したときに得られた大量の変数データの例である。"VMware"}上記において、1番目のハードディスクドライブの型番はテンプレートまたはplaybookで以下のように参照される。}}同様に、システムが報告するホスト名は次の通りです。}}最初のピリオドの前までの文字列のホスト名は以下のようになる。}}Factsは条件分岐(条件分岐参照)やテンプレートで頻繁に量される。特定の条件に一致するような動的なホストグループを作成するためにFactsを利用できる。詳細はモジュールを使って動かすのgroup_byを参照しろ。同様に、条件分岐の章で説明した「一般化された条件分岐文」も参照しろ。Factsを無効にするあなたがあなたのホストについてのFactデータを知る必要がなく、あなたのシステムに関する全てを一元的にしっているならば、fact収集をオフにするこができる。Fact収集のオフは主に非常に多くのシステムを伴うpushモードでAnsibleの実行時間を短縮するときや、あなたがAnsibleを実験環境で使用しているときに有利である。noローカルFacts(Facts.d)バージョン1.3の新機能Playbookの章で説明したように、AnsibleのFactsはplaybook変数で使うリモートホストについてデータを取得する方法である。通常、これらはAnsibleの設定モジュールによって自動的に検出される。ユーザーはAPIガイドに記載されているようにカスタムFactモジュールを書くこともできる。あなたがFactモジュールの記載なしでAnsible変数で使用するためのシステムを供給したいまたはユーザー供給データがほしい場合にはどうしたらよいか?例えば、ユーザーがシステム管理についていくつかの局面をコントロールしたい場合はどうしたらよいか?もしリモートで管理されるシステムが/etc/ansible/facts.dディレクトリおよびこのディレクトリ内に.factでおわるJSONまたはINI、JSONを返す実行可能ファイルを持つならば、AnsibleでローカルFactを提供できる。fact_pathディレクティブを使用して別のディレクトリを指定できる。/etc/ansible/facts.d/preferences.factと仮定する。[general]asdf=1bar=2これは、メンバーとしてasdfとbarを持つgeneralという名前の連想配列変数を生成する。これを検証するには以下を実行する。"filter=ansible_local"すると、あなたは以下のFactが追加されていることが確認できるだろう。}このデータ以下のようにアクセスできる。}}ローカルの名前空間はユーザーが入力したFactがplaybook内の他の場所で定義されたシステムFactや変数が上書きされるのを防ぐ。**注記**key=valueのペアのキー部はansible_local変数の内部で小文字に変換される。}}``ではアクセスできない。これはAnsibleが[optionxform](https://docs.python.org/2/library/configparser.html#ConfigParser.RawConfigParser.optionxform)メソッドを通して全てのオプション名を渡すPythonの[ConfigParser](https://docs.python.org/2/library/configparser.html)を使うためであり、このメソッドのデフォルトの実装がオプション名を小文字化するからです。あなたがカスタムFactをコピーして実行しているplaybookを持っているならば、セットアップモジュールを再実行するための明示的な呼び出しを行うことで、その特定のplay中にそのFactを使用することができる。それ以外の場合は、Fact情報を収集する次のplayで利用可能になる。filter=ansible_localこのパターンでは、Factモジュールも書くことができ、これをオプションとして考えることができる。(以下未翻訳)テンプレート(Jinja2)変数セクションですでに述べたように、Ansibleは動的な式と変数へのアクセスを可能にするJinja2テンプレートを使っている。Ansibleはフィルターとテスト変数の数を拡張するだけでなく新しいプラグインタイプ:lookupsの追加も拡張する。タスクが送信されてターゲットマシン上で実行される前にAnsible管理マシン側ですべてのテンプレーティングが実行されることに注意してください。これはターゲット上の要件を最小化する(jinja2は管理マシン上でのみ必要)ためで、タスクに必要な最小限の情報を渡すことができるため、ターゲットマシンは管理マシンがアクセスする全てのデータのコピーを必要としない。フィルタAnsibleのフィルタはJinja2の機能であり、テンプレート式内部のデータを変換するために使われる。Jinja2は多くのフィルタが付属している。公式Jinja2ドキュメント内の(組み込みフィルタ)[http://jinja.pocoo.org/docs/templates/#builtin-filters]を参照しろ。テンプレーティングはAnsible管理マシン上で実行され、タスクのターゲットホスト上ではないため、フィルタは管理マシン上でそれらがローカルデータを操作する際にフィルタも実行されることを考慮しろ。加えて、Jinja2によって提供されるものとしてAnsibleはそれ自身を所有しており、ユーザーは独自のカスタムフィルタを追加できる。データフォーマットフィルタ次のフィルタはテンプレート内に書かれたデータの構造を取得し、異なるフォーマットで書き出す。}}両方のインデントを変更することも可能である(バージョン2.2の新機能)。}}あるいは、すでにフォーマットされたデータを読むこともあるかもしれない。変数が定義されていない場合、Ansibleとansible.cfgでのデフォルトの振る舞いは「処理に失敗」になってしまうが、これをオフにすることができる。この機能をオフにして明示的にチェックすることができる。}}変数は通常通りそのまま展開され、変数が定義されていない場合テンプレート評価時にエラーを吐くようになる。定義されていない変数のデフォルト設定Jinja2は変数が定義されていない場合の失敗」により適した'default'フィルタを提供する。}}上記の例では、変数'some_variable'が定義されていないならば、エラーが発生するのではなく、その値が「5」と扱われる。変数が空の文字列に評価される場合は、フィルタの2番目のパラメータをtrueに設定する必要があります。多くの場合、playの結果は変数値、Fact(対象のリモートシステムから得られる情報)、または前のタスクの結果に依存する。場合によっては、変数値は他の変数値に依存することもある。対象ホストが他の基準にマッチするかに基づいて、ホストを管理するための追加グループを作成できる。このトピックでは、playbookで条件分岐の使い方について説明する。**注記**Ansibleの実行フローを管理する多くのオプションがある。多くの条件分岐の例はここにある。特定のホストにおける特定の手順をスキップしたい場合があるだろう。これは、OSが特定のバージョンであればとクチのパッケージをインストールしないというものであったり、ファイルシステムがいっぱいになったらクリーンアップの手順を実行するというものである。これは、二重中カッコなしの生のJinja2式を含むwhen節を使ったAnsibleで簡単に実行できる(変数を参照)。条件分岐内では二重中括弧なしで直接使われるカッコを使用して条件分岐をグループ化することもできる。"7")全てが真でなければならないという複数の条件分岐(=論理積'and')はリスト的にも書ける。"6"Jinja2の"filters"のいくつかもwhen文で使われ、そのいくつかは固有でありAnsibleによって提供される。古いバージョンのAnsibleでは"successs"を使っており、今はsucceededがイマドキだが両方使える。setupヒント:文字列の変数が返ってきて、それに対して数学的な演算の比較をしたいと思うことがあるだろう。パッケージがインストールされている必要があるplaybookまたはインベントリで定義された変数も使うことができる。epicもし必要な変数が設定されていなかったら、あなたはJinja2の定義済みテストを使用して、「スキップ」させるまたは「失敗」させることができる。undefinedこれは、変数ファイル(下記参照)の条件付きインポートと組み合わせると特に便利である。}}"を使う必要はない。ループ処理と条件分岐ループ処理(ループ処理参照)にwhenを組み合わせると、when文がそれぞれの項目毎に対して個別に処理されることに注意せよ。5もし定義されているループ変数に依存するタスク全体をスキップしたいならば、空のイテレータを指定する"|default"フィルタを使え。5カスタムFactでロード必要に応じて独自Factを指定することも簡単である。モジュールの開発で説明している。それらを実行するためには、タスクリストの先頭で独自カスタムFact収集モジュールを呼び出すだけで、将来のタスクへのアクセスが可能になる。'1234'ロール、インポート、インクルードにwhenを適用する同じ条件分岐文を全て共有する複数のタスクがある場合、以下のようにタスクインクルード文へ条件付けができる。全てのタスクが評価されるが、条件分岐が全てのタスクに対して適用されることにもなります。output"**注記**バージョン2.0より前のバージョンでは、タスクインクルードのみ動作してplaybookのインクルードは動作しなかったが、バージョン2.0で両方とも可能になった。}条件にマッチしないシステムに対しては、この方法ではAnsibleデフォルトで、大量の"skipped"が出力されることに注意せよ。同様のことを実現するためのより効率的な方法についてはモジュールを使って動かすの"group_by"モジュールを参照せよ。importの代わりに"include_*"taskを使うと,条件分岐はタスクのインクルード処理自体にのみ適用され、インクルードされるファイル内のその他のタスクには適用されない。x上記の例で、代わりにimport_tasksが使われていれば、両方のインクルード対象タスクがスキップされていた。include_tasksを仕様すると、条件分岐が適用されないため、タスクは期待通りに動作する。条件付きインポート**注記**これはあまり仕様されない高度なトピックです(以下未翻訳)変数に基づくファイルとテンプレートの選択**注記**これはあまり使用されない高度なトピックです。このセクションをスキップすることができます。レジスタ変数playbookでは特定のコマンドの結果を変数に格納して後からそれにアクセスしたいときがある。この方法でコマンドモジュールを使用すると、いろいろと特定のfactを記述する必要がなくなり、例えば特定のプログラムの存在チェックをすることができる。'register'キーワードは結果を保存する変数を決定する。その結果を保存した変数はテンプレート、アクション行や"when"文で使うことができる。-1前に示した通り、レジスタ変数の文字列は'stdout'値でアクセス可能になる。レジスタ変数はリストに変換されるまたはすでにリストである場合、タスクのループ処理で以下に示すように使われる。'stdout'値でアクセスできます。""よく使われるFacts以下のFactはよく条件分岐で使われる。ansible_distribution以下のような値になる:AlpineAltlinuxAmazonArchlinuxClearLinuxCoreosDebianGentooMandrivaNAOpenWrtOracleLinuxRedHatSlackwareSMGLSUSEVMwareESXansible_distribution_major_versionこれはOSのメジャーバージョンになる。16.04.の値は16になる。大量のユーザー作成、大量のパッケージのインストール、特定の結果に達するまでポーリングのように一つのタスク内で多くのことをやりたいと思うかもしれません。この章では、playbook内でループ処理を使う方法について説明します。}}"上記は次のものと同等である。"wheel"**注記**Ansible2.5以前では主に``with_<lookup>``キーワードがループ処理を作るために使われ、"loop"キーワードは基本的に``with_list``に似ている。yumやaptモジュールのようないくつかのプラグインはそれらのオプションに直接的にリストを取り込むことができ、これはタスクをまたがってループするよりも最適である。詳細はそれぞれのアクションのドキュメントを参照しなさい。"{{list_of_packages}}"反復処理項目の型は単純な文字列のリストでなければならないわけではない。ハッシュリストがあるならば、次のようにサブキーを参照できる。}条件分岐とループを組み合わせるとき、when:文はそれぞれの項目に対して個別に処理されることにも注意せよ。例についてはWhen文を参照せよ。単純なリスト以上のものを必要とすることもあるだろう。Jinja2式を複雑なリストを作成するために使うことができる。'nested'ルックアップを使ってリストを組み合わせることができる。}}"**注記**``with_``ループは実際には``with_``と``lookup()``の組み合わせであり、``item``は検索である。``loop``を使って上記と同じようなことができる。2.5では、新しいjinja2関数が名前付きクエリに導入されました。これは、新しいloopキーワードを使用するときにlookupにいくつかの利点があります。これはlookupのドキュメントで詳細に説明されていますが、queryではlookupプラグインのより簡単なインターフェイスと予測可能な出力が提供されloopとの互換性が向上します。状況によっては、lookup関数がloopに必要なリストを返さないことがあります。次の呼び出しは同等です。Trueを使用します。ループ処理バージョン1.4の新機能ある条件が満たされるまで、タスクを再試行したいことがあります。go"と出力されるか、またはタスクが10秒毎に5回再試行されるまで、shellモジュールを再帰的に実行します。retries"のデフォルト値は3、"delay"のデフォルト値は5です。タスクは、最後に実行したときの結果を返します。それぞれの試行結果は、-vvオプションをつけると表示できます。登録された変数には、タスクの再試行回数を持つ新しいキー"atempts"もあります。**注記**``until``パラメータが定義されていないならば、``retries``パラメータは強制的に1になる。コミュニティガイドコミュニティガイドへようこそ。Ansibleコミュニティの貢献メンバーになることについて、すべてのことを教えることが目的である。以下のトピックのいずれかを選んで開始しろ。助ける方法パワーユーザーになるオンラインで質問を尋ねて答えるモジュール管理者ガイドラインリリース管理者リリースプロセスコミュニケーション他のツールとプログラム開発者ガイドAnsible開発者ガイドへようこそ。Engineの開発に至るまで、コードを使ってAnsibleと対話して整形するために利用できるすべてのパスを文書化することです。開始するには、次のいずれかのトピックを選択します。アーキテクチャモジュール開発Ansibleモジュールアーキテクチャ補足:モジュールユーティリティプラグイン開発...VagrantとAnsibleを使う紹介Vagrantは仮想マシン環境を管理するツールであり、さまざまな仮想化やクラウドプラットフォームの上で再現可能な作業環境を構成し、使用することができます。これらの仮想マシンの準備ツールとしてのAnsibleとの統合も行われており、この2つのツールはうまく連携しています。1.7+とAnsibleを一緒に使用する方法について説明します。あなたがVagrantに慣れていない場合は、マニュアルを参照してくださいこのガイドは、既にAnsibleをインストールして使用していることを前提としています。Gitのチェックアウトから実行しても問題ありません。詳しくは、「インストール・ガイド」の説明に従ってください。VagrantのセットアップVagrantをインストールした後の最初のステップは、Vagrantfileを作成してニーズに合わせてカスタマイズすることです。Vagrantのドキュメントで詳細に説明されていますが、ここでは単一のマシンを管理するためのAnsibleプロビジョナを使用するためのセクションを含む簡単な例を示します。playbookを参照する「config.vm.provision」セクションに注目してください。仮想マシンが起動してSSHアクセスの準備が整ったら、Vagrantはプロビジョニングを実行します。Vagrantfileで設定できる多くのAnsibleオプションがあります。Provisionerのドキュメントを参照してください。up上記コマンドでVMが起動し、最初のVM起動時にプロビジョニングplaybookが実行される。既存のVMでPlaybookを再実行するためには次のコマンドを実行する。provisionこれにより、既存のVMに対してplaybookが再実行されます。ansible.verboseオプションを有効にすると、この例で示すように、Vagrantの裏で実行されている完全なansible-playbookコマンドを表示するように指示します。この情報は、統合の問題をデバッグするのに非常に有用であり、次のセクションで説明するように、シェルから「Ansible」を手動で実行するためにも使用できます。場合によっては、マシンに対して手動でAnsibleを実行することもできます。provisionをキックするよりも速く、かなり簡単です。我々のVagrantfileの例では、Vagrantは「.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory」にインベントリファイルを自動的に作成します。このインベントリは、Vagrantが自動的に作成するSSHトンネルに従って設定されます。単一のマシン環境用の典型的な自動作成インベントリファイルは、次のようになります。ansible_ssh_port=2222もしあなたが手動でAnsibleを実行したいのであれば、少なくともあなたのユーザ名、SSH秘密鍵、インベントリに対して、ansible,ansible-playbookコマンドに正しい引数を渡す必要がある。Vagrantのグローバル保護されていないキー(Vagrantファイルではconfig.ssh.insert_keyをfalseに設定する必要があります)を使用する例を次に示します。private_keyなどのパスに格納されます)。playbook.ymlネットワーク自動化のためのAnsibleまえがき安全なネットワークモジュールは、シンプルでパワフルなエージェントレスオートメーションの利点をネットワーク管理者やチームにまで拡張します。可能なネットワークモジュールは、ネットワークスタックの構成、既存のネットワーク状態のテストと検証、およびネットワーク構成のドリフトの発見と修正を行うことができます。Guideから始めてください。特定のネットワークモジュールの使用に関するドキュメントについては、すべてのネットワークモジュールのリストを参照してください。一部のネットワークモジュールは、Ansibleコミュニティによって管理されています。Networkチームによって管理されているネットワークモジュールのリストがあります。キーワードplaybook共通で利用できるキーワードである。ディレクティブのエイリアスはここには反映されず、変更可能なエイリアスもありません。タスク内のアクションは、任意のAnsibleモジュールの名前で置き換えることができます。以下は、Ansibleのドキュメントの他の場所で使用されている用語定義のリスト(および再説明)です。完全なドキュメントと文脈で用語を見るためには、ドキュメントのホームページを参照してください。これはAnsibleのコンポーネントに関する知識を確認し、それらがどのように適合するかを理解するのには良いリソースです。それは、あなたが見直しのために読んだり、メーリングリストに用語が現れたりしたときに読んでみたいことかもしれません。Actionアクションは、実行するモジュールとそのモジュールに渡す引数を指定するタスクの一部です。各タスクは1つのアクションしか持つことはできませんが、他のパラメータを持つこともできます。requestStockLike31@WisteriaWave実務上、いろんな技術を広く浅く経験してきてます。AcademyにてUnity勉強中。久々にちゃんとしたプログラミングしてるけど、やっぱり楽しい。今後はちゃんとしたWeb技術者として、イケてるフレームワークをしっかり学んでいきたい。