Ansibleでよくつかうモジュール8選
こんにちは、坂巻です。
みなさんAnsibleは利用されていますか?
ここ最近、Ansibleに触れる機会が増えたのですが、
使用しているモジュールはそんなに多くないことに気が付きました。
とはいえ、使用するモジュールを度々調べていたので、
よくつかうモジュールをマイリファレンスとしてまとめたいと思います。
今回はそんなエントリです。
取り上げたモジュールについては、
一般的なモジュールが多いと思いますので、リファレンスとして誰かの役に立てれば幸いです。
目次
- はじめに
- よくつかうモジュール
- command
- shell
- file
- copy
- template
- service
- lineinfile
- yum
- さいごに
- 参考・関連
はじめに
本エントリの前提は以下となります。
- Ansible実行サーバをコントローラノード、管理対象サーバをターゲットノードと呼んでいます。
- 文中の例に取り上げたタスクは、ロール内で使用することを前提に記載しています。
- 文中の例にある
name
ディレクティブは必須項目でありませんが、可読性、メンテナンス性を考慮して記載しました。 - 文中のモジュールについては、順不同になります。
それでは紹介していきたいと思います。
よくつかうモジュール
command
ターゲットノードで任意のコマンドを実行します。
Ansibleの既存モジュールで実行できない場合等に、このモジュールを使用します。
ターゲットノードで/tmp/work/ec2-user/test.sh
を実行する例を記載します。
1 2 3 4 | - name: Run Command command : /tmp/work/ec2-user/test .sh args: chdir: /tmp/work/ec2-user |
- chdir…コマンド実行前に指定されたディレクトリに移動。
chdir
等のcommandモジュールに渡す引数はargs
ディレクティブ配下に記載します。
commandモジュールの注意点としては、シェルを通して実行しないため、環境変数、リダイレクトやパイプは使用できません。
また、コマンド成功時のステータスは常にchangedとなり、コマンドの実行結果が0以外は、failedとなります。
より詳細な仕様についてはcommandを確認するか、
コマンドラインよりansible-doc command
を実行して確認ください。
shell
ターゲットノードで任意のコマンドを実行します。
ターゲットノードで/tmp/work/ec2-user/test.sh
を実行する例を記載します。
1 2 3 4 | - name: Run Command shell: /tmp/work/ec2-user/test .sh 2>&1 | tee /tmp/work/ec2-user/test .log args: chdir: /tmp/work/ec2-user |
- chdir…コマンド実行前に指定されたディレクトリに移動。
commandモジュール同様で、任意のコマンドを実行できますが、
commandモジュールとは違い、シェル(/bin/sh)を介して実行されます。
The shell module takes the command name followed by a list of space-delimited arguments. It is almost exactly like the command module but runs the command through a shell (/bin/sh) on the remote node.
上記のように、リダイレクトやパイプが使用できることが特徴です。
commandモジュール同様、引数はargs
ディレクティブ配下に記載します。
より詳細な仕様についてはshellを確認するか、
コマンドラインよりansible-doc shell
を実行して確認ください。
file
ファイルやディレクトリの作成や権限変更、削除の処理を行うことができます。
ターゲットノードで/tmp/work/ec2-user
ディレクトリを作成する例を記載します。
1 2 3 4 5 6 7 | - name: Make Work Directory file : path: /tmp/work/ec2-user state: directory owner: ec2-user group: ec2-user mode: 0755 |
- path…操作対象のファイルパス指定。
- state…操作対象の種別(file、directory、link等)を指定。
- owner…所有者ユーザの指定。
- group…所有者グループの指定。
- mode…権限の指定。
より詳細な仕様についてはfileを確認するか、
コマンドラインよりansible-doc file
を実行して確認ください。
copy
コントローラノードに存在するファイルを、ターゲットノードに送信することができます。
ターゲットノードにhttpd.conf
を送信する例を記載します。
1 2 3 4 5 6 | - name: Copy Config File copy: src: httpd.conf dest: /etc/httpd/conf mode: 0644 backup: yes |
- src…コントローラノードにある送信対象のファイルパス。パスが
/
で終わる場合は、そのディレクトリ内のファイルが送信され、パスが/
で終わっていない場合は、ディレクトリ自体が送信されます。 - dest…送信先であるターゲットノードの絶対パスを指定。
- mode…権限の指定。
- backup…ファイルの送信前にバックアップファイルを取得。
本エントリの冒頭で述べた通り、ロールの使用を前提しており、
ロール内のfiles
ディレクトリにhttpd.conf
を格納しているため、パスの指定は省略しています。
1 2 3 4 5 6 7 8 9 | test ├── defaults │ └── main.yml ├── files │ └── httpd.conf ├── tasks │ └── main.yml └── templates └── httpd.conf |
backup
の指定により、タスク実行時にdest
で指定したディレクトリにタイムスタンプを付与したバクアップファイルが作成されます。
1 2 | -rw-r--r--. 1 root root 11738 4月 30 09:26 httpd.conf -rw-r--r--. 1 root root 11753 1月 8 20:46 httpd.conf.5410.2018-04-30@09:26:22~ |
より詳細な仕様についてはcopyを確認するか、
コマンドラインよりansible-doc copy
を実行して確認ください。
template
コントローラノードに存在するファイルを、ターゲットノードに送信することができます。
ターゲットノードにhttpd.conf
を送信する例を記載します。
1 2 3 4 5 6 | - name: Copy(template) Config File template: src: httpd.conf dest: /etc/httpd/conf mode: 0644 backup: yes |
- src…コントローラノードにある送信対象のファイルのパス。
- dest…コピー先であるターゲットノードの絶対パスを指定。
- mode…権限の指定。
- backup…ファイルの送信前にバックアップファイルを取得。
copyモジュールとは違い、変数が使用できることが特徴です。
test/templates/httpd.conf
1 2 3 | (略) Listen {{ Listen_Port }} (略) |
test/defaults/main.yml
1 2 3 | (略) Listen_Port: 80 (略) |
送信されたファイルを確認すると、変数が展開されファイルが送信されます。
/etc/httpd/conf/httpd.conf
1 2 3 | (略) Listen 80 (略) |
より詳細な仕様についてはtemplateを確認するか、
コマンドラインより、ansible-doc template
を実行して確認ください。
service
ターゲットノード上のサービスの操作が行えます。
ターゲットノードでhttpd
サービスの再起動する例を記載します。
1 2 3 4 | - name: Restarte Service service: name: httpd state: restarted |
- name…サービスの名前を指定。
- state…サービスの状態(started、stopped、restarted、reloaded)を指定。
より詳細な仕様についてはserviceを確認するか、
コマンドラインよりansible-doc service
を実行して確認ください。
lineinfile
ターゲットノードにあるファイルを直接書き換えることができます。
/etc/httpd/conf/httpd.conf
の一部を書き換える例を記載します。
1 2 3 4 5 6 | - name: Restarte Service lineinfile: dest: /etc/httpd/conf/httpd .conf regexp: ^DocumentRoot line: DocumentRoot "/var/www/html" backup: yes |
- dest…編集するファイルのパスを指定。
- regexp…編集対象の行を探す正規表現を指定。
- line…ファイルに挿入、置換する行を指定。
- backup…ファイルの書き換え前にバックアップファイルを取得。
上記タスクの実行で/etc/httpd/conf/httpd.conf
は以下のように書き換えられます。
タスク実行前
1 2 3 | (略) DocumentRoot "/var/www/html" (略) |
タスク実行後
1 2 3 | (略) DocumentRoot "/var/www/ec2-user/html" (略) |
より詳細な仕様についてはlineinfileを確認するか、
コマンドラインよりansible-doc lineinfile
を実行して確認ください。
yum
yumパッケージマネージャを使用して、パッケージをインストール、アップグレード、ダウングレード、削除、および一覧表示することができます。
1 2 3 4 | - name: Installe Package yum: name: httpd when: ansible_distribution in [ 'RedHat' , 'CentOS' ] |
- name…パッケージ名を指定。
より詳細な仕様についてはyumを確認するか、
コマンドラインよりansible-doc yum
を実行して確認ください。
ここではwhenディレィクティブを使用して、
特定の条件のみでタスクが実行されるケースを記載しました。
ansible_distribution
はAnsibleが自動で実行しているsetupモジュールにより設定された変数です。
上記ではansible_distribution
が、RedHat
またはCentOS
の場合のみタスクが実行されます。
なお、whenで指定した条件に合致しない場合、タスクはスキップとなります。
1 2 | TASK [ test : Installe Package] ****************************************************************************** skipping: [tset-bastion_server] |
setupモジュールは、PlayBook実行時に自動で実行されますが、以下のように実行することも可能です。
1 | ansible -m setup ホスト名 |
上記を実行すると、setupモジュールで取得した情報が出力されます。
さいごに
今回は個人的によく使うモジュールを記載しました。
使用できるモジュールは多数ありますので、
公式のAll modulesまたは、ansible-doc -l
コマンドで確認してください。
本エントリで記載したモジュール数は少なめですが、リファレンスとして誰かの役に立てれば幸いです。
機会をみてよくつかうディレクティブもまとめてみたいと思います!!