2018Ansibleを自分のローカル環境上で試す株式会社プライムストラクチャーのエンジニアのSayaです。インフラ構築を自動化してくれるツールであるAnsible。今回はこれを実際に自分のローカル環境上で試す方法を紹介します。以下のコマンドでAnsibleのバージョンを確認します。--versionAnsibleがちゃんとインストールされていれば以下のような表示が出てきます。以下のコマンドでshellモジュールをAdHocコマンドで実行します。'hostname'すると以下のように表示されます。'hostname'でhostnameというパラメータを与えています。shellモジュールはパラメータで与えられたコマンドを実行するモジュールなので、今回はhostnameコマンドをlocalhostに実行しています。同様に以下のコマンドも入力します。'filter=ansible_distribution*'すると以下のようにlocalhostの情報が表示されます。いうパラメータで呼び出しています。setupモジュールは対象ノードの情報を収集します。パラメータを何も与えなければ全ての情報を収集、パラメータとしてfilter=文字列を与えると文字列と一致する情報のみを収集してくれます。対象ノードを管理する為のインベントリファイルを作成します。「inventory」という名前の拡張子なしのインベントリファイルを作成します。中身は以下のようにします。ansible_connection=localこのインベントリは3つのグループを持ち、各グループには1台もしくは複数の対象ノードが所属しています。ホストに与えられているansible_connectionオプションは、対象ノードに接続する際に接続方法に関する情報を与えます。ここではlocalが与えられています。ansible_hostオプションはホストのIPアドレスを与えるオプションです。ホストに別名をつけたい場合に使います。このインベントリファイルを用いて、以下のAdHocコマンドを実行してみます。以下は各AdHocコマンドとその実行結果です。"pong"}第一引数に対象とするインベントリのグループの指定、-iオプションでインベントリを記述したファイルの指定を行ないました。引数をallとすることで全てのホストを指定します。-mで指定しているpingモジュールは、対象がAnsibleで自動化可能な状態であれば「pong」と返します。-oオプションは出力結果を1ホスト1行にまとめます。クレデンシャルクレデンシャルは、Ansibleが対象ノードに接続する際に使用する認証情報です。以下ではコマンドラインの引数として与えています。-kグループへの接続に-uオプションで指定されたuserAを使いました。-kオプションによってパスワード入力プロンプトが起動して、ここで入力されたパスワードが接続に用いられます。Playbookの作成playbook.ymlという名前のPlaybookを作成します。PlaybookはYAML形式なのでインデントに注意します。}}"このPlaybookを下記のコマンドで実行してみます。playbook.ymlansible-playbookコマンドでPlaybookを実行、-iでインベントリを指定してそのあとに実行するPlaybookを指定します。最初にplaybook.yml内に書かれているtasksで指定されたshellモジュールが起動し、パラメータとしてuptimeが与えられてuptimeコマンドが実行されます。その次にあるregisterがこのモジュールの実行結果をresultという名前の変数に格納しています。次にdebugモジュールがデバッグを行い、msgで与えられた変数や文字列を実行時に出力します。一番目のdebugモジュールはmsgに変数result.stdoutを渡し、uptimeコマンドの結果が格納されているresultの中の標準出力が格納されたstdoutがmsgで出力されています。二番目のdebugモジュールはmsgに変数sample_varsを渡してPlaybook内で定義された変数の値を出力しています。次に以下のコマンドで変数を上書きしてみます。'sample_vars=overwrite_vars'すると以下のようにmsgの出力が変わります。"overwrite_vars"}~~~省略~~~-eはコマンドラインから変数を与えるオプションです。このように定義した変数を上書きして実行することもできます。まとめ今回はAnsibleを実際に自分のローカル環境上で試してみました。インベントリで対象ノードを指定して、Playbookに沿って実行されるという流れが実際に動かしてみると分かります。この内容はSoftwareDesign-2018年12月号の中島倫明氏の記事を参考にしています。中島氏はAnsibleに関して他にもチュートリアルなどを出しています。(前回以前の記事参照)こちらもとても分かりやすいので、やってみることをオススメします。