Ansibleインベントリ

Ansible

今回はインベントリの定義の動作を確認していきます。
内容としては以下になります。
・グループ化
・グループのネスト
・グループ変数

インベントリファイルは、デフォルトの/etc/ansible/hostsを使っていきます。

まずインベントリファイルにグループ名を付けた形で定義します。

[test]
node1 ansible_host=192.168.157.137

[test]がグループ名にあたります。node1はターゲットノードになります。

これをアドホックコマンドで使用してみます。
グループ名testを指定してみます。

[root@ansible-ctl ~]# ansible test -m ping
node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[root@ansible-ctl ~]#

成功しました。次はnode1を指定してみます。

[root@ansible-ctl ~]# ansible node1 -m ping
node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[root@ansible-ctl ~]#

こちらも同じく成功しました。インベントリで指定したグループ名を使用してansibleを実行できました。

次はグループのネストです。
インベントリに先ほど作成した[test]グループの上位グループを作成します。

[web:children]
test

[test]
node1 ansible_host=192.168.157.137

グループ[test]の上位グループ[web]を定義しました。アドホックコマンドで指定できるか見ていきます。

[root@ansible-ctl ~]# ansible web -m ping
node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[root@ansible-ctl ~]#

成功しました。グループのネストはターゲットノードを分類分けする際に便利な機能として使えそうです。

次はグループ変数を見ていきます。インベントリに変数を定義していきます。

[test]
node1 ansible_host=192.168.157.137

[test:vars]
var_test="This is test message."

アドホックコマンドでこの変数を使えるのか見ていきます。
echoコマンドで変数の中身を表示できるのか試してみます。

[root@ansible-ctl ~]# ansible test -a "echo {{ var_test }}"
node1 | CHANGED | rc=0 >>
This is test message.
[root@ansible-ctl ~]#

成功しました。インベントリに指定したvar_testの内容が表示されています。

では、定義されていない変数名を指定した場合どうなるかも見てみます。

[root@ansible-ctl ~]# ansible test -a "echo {{ var_te }}"
node1 | FAILED | rc=-1 >>
The task includes an option with an undefined variable. The error was: 'var_te' is undefined
[root@ansible-ctl ~]#

変数が未定義だとしてエラーになりました。

変数の利用方法がわかりました。変数として状態を定義してansibleを実行することができそうです。

コメント

タイトルとURLをコピーしました