AnsibleとはAnsibleの特徴エージェントレスでサーバ構築を自動化してくれるツールです。sshdが動作しているマシンにSSHで接続し環境を構築してくれます。設定ファイルはYAMLで書きます。プログラムの知識(Ruby、Python、etc.)は不要です。数台~数十台規模のサーバ構築だったらchefよりも簡単です。以前の記事を参照してください。1.9から、他のユーザの権限(例えばroot権限)で実行するための'become'が追加されました。-でrootになって操作されるかと思います。-した後にコマンドラインからコマンドを直接実行する場合で、環境変数のPATHが異なるため、コマンドの実行結果が異なる場合があり注意が必要です。今まで、この辺をあまり意識せずに使っていたため、コマンドを直接実行して確認済みのコマンドが、PlayBookでは失敗する事態が発生し、少し苦労したので、becomeと環境変数のPATHについて、改めて調べてみました。-の状態で各種コマンドを実行する方法が不明なこと。Ansible本家の見解Ansible公式HP、GitHubのissuesを調査してみました。-したい人は、直接コマンドを実行してください。issues本家でのディスカッションも結論がでていない模様(ステータスがOpenのままです)。動作検証まずは、PATHがどのようになるのか調査してみました。-」相当のPATHを設定するGoogleで検索すると、commandやshellで.bashrcや.bash_profileを読み込む方法が紹介されていますが、これをやってしまうと冪等性の保証が難しくなってしまいます。そこで、environmentでPATHを設定する方法について紹介します。設定前の状態まず、何もしていないとどのようになるのか実行してみます。var=not_become_path.stdout実行してみます。failed=0一般ユーザのPATH:/usr/local/bin:/bin:/usr/bin:/opt/aws/binrootのPATH:/sbin:/bin:/usr/sbin:/usr/binになっています。いわゆるログインしていない状態のようです。lookupを使った場合は以下のようになります。}}lookupを使った場合の実行結果は以下のようになります。failed=0こちらは、ec2-userでログインした状態になっていました。environmentでPATHを設定してみるenvironmentでPATHを設定してみます。$PATHを調べておきます。$PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/binPlayBookは以下のようになります。var=not_become_path.stdout実行してみましょう。trueの場合も、そうではない場合も、いずれも設定したPATHになっています。ちなみに、environment:は、タスクのほうに書くことも可能です。タスクごとに設定したい場合は、タスクに対して指定していくことになります。PlayBookは以下のようになります。var=not_become_path.stdout実行結果は、PlayBook全体に対してenvironment:を設定した場合と同じになります。environmentのスコープPlayBookやTaskに対して設定したenvironment:のスコープは、設定した範囲になります。PlayBookに対して設定した場合、別のPlayBookへは影響がでないようになっています。自分でコマンドを羅列して/bin/shで実行する場合は、設定したPATHを元に戻すコマンドも書かなければならないのですが、AnsibleのPlayBookは、その辺を自動で行ってくれるので便利です。おわりに今回は、environmentを使ってPATHを設定する方法を紹介しました。PATHの設定方法は、説明した通りになりますが、PATH依存のPlayBookは思わぬ落とし穴にはまってしまう可能性があります。PlayBookで、shellやcommandモジュールを使う際には、フルパスで書く習慣をつけておくと、安全でよいかと思います。/usr/local/bin/cmdAnsibleのような構成管理ツールを使うにあたり、単に動作しますという状態ではなく、保守性や堅牢性を考慮した運用ができるように心がけていけるとよいですね。