Chapter 07

アドホックコマンド

y_mrok
y_mrok
2021.10.17に更新
このチャプターの目次

説明

この章の説明はこのリンクをクリックしてください。

演習問題

準備
インベントリーを分割 」の演習問題 Q1 で作成したインベントリーファイル「 hosts5.yml 」をコピーし、「 hosts6.yml 」ファイルを作成します。本演習では「 hosts6.yml 」ファイルを使用します。

Q1. db グループに含まれる管理対象ノードのホスト名を確認してください。

解答
y_mrok@ctrl:~/code/chap7$ ansible db -i hosts6.yml -m ansible.builtin.command -a "hostname"
oshikoji | CHANGED | rc=0 >>
oshikoji
oike | CHANGED | rc=0 >>
oike.example.jp
y_mrok@ctrl:~/code/chap7$ 

または

y_mrok@ctrl:~/code/chap7$ ansible db -i hosts6.yml -a "hostname"
oshikoji | CHANGED | rc=0 >>
oshikoji
oike | CHANGED | rc=0 >>
oike.example.jp
y_mrok@ctrl:~/code/chap7$ 

Q2. すべての管理対象ノードで ansible.builtin.ping モジュールを実行する。

解答
y_mrok@ctrl:~/code/chap7$ ansible all -i hosts6.yml -m ansible.builtin.ping
oshikoji | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
takeyamachi | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
marutamachi | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
oike | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
nijyo | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
ebisugawa | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
y_mrok@ctrl:~/code/chap7$ 

ansible.builtin.ping モジュールは次の動作をします。

  • コントロールノードから管理対象ノードへ ssh 接続できるか確認
  • ssh 接続できる場合は管理対象ノードで簡易な Ansible のコードを実行
  • 上記 2 つが行えたときは正常動作の結果として変数 ping に "pong" を設定する

すなわち、管理対象ノードが Ansible で管理可能かを確認します。管理対象ノードでプレイブックや各種のアドホックコマンドを実行する前に、 ansible.builtin.ping モジュールで管理可能か確認することをお勧めします。

Q3. 以下の準備作業を実施後、すべての管理対象ノードのホスト名を確認してください。

準備作業

  1. インベントリーファイル「 hosts6.yml 」のホスト名を順番に node1 , node2 , ・・・ に変更します。

    • 変更前の「 hosts6.yml 」の状態
    hosts6.yml
    ---
    all:
      hosts:
        marutamachi:
        takeyamachi:
        ebisugawa:
        nijyo:
      children:
        db:
          hosts:
            oshikoji:
            oike:
    
    • 変更後の「 hosts6.yml 」の状態
    hosts6.yml
    ---
    all:
      hosts:
        node1:
        node2:
        node3:
        node4:
      children:
        db:
          hosts:
            node5:
            node6:
    
  2. 「 host_vars 」ディレクトリー内のファイル名を変更します。

    • marutamachi.yml → node1.yml
    • takeyamach.yml → node2.yml
    • ebisugawa.yml → node3.yml
    • nijyo.yml → node4.yml
    • oshikoji.yml → node5.yml
    • oike.yml → node6.yml

変更後のファイルの配置状態です。

.
├── group_vars
│   ├── all.yml
│   └── db.yml
├── host_vars
│   ├── node1.yml
│   ├── node2.yml
│   ├── node3.yml
│   ├── node4.yml
│   ├── node5.yml
│   └── node6.yml
└── hosts6.yml
解答
y_mrok@ctrl:~/code/chap7$ ansible all -i hosts6.yml -a "hostname"
node5 | CHANGED | rc=0 >>
oshikoji
node2 | CHANGED | rc=0 >>
takeyamachi.example.jp
node1 | CHANGED | rc=0 >>
marutamachi.example.jp
node4 | CHANGED | rc=0 >>
nijyo
node3 | CHANGED | rc=0 >>
ebisugawa
node6 | CHANGED | rc=0 >>
oike.example.jp
y_mrok@ctrl:~/code/chap7$ 

実際の管理対象ノードとの接続は変数 ansible_host で設定した値を使用します。そのため、インベントリーファイル内のホスト名が実際のホスト名と異なっていても支障はありません。しかし、実際のホスト名とインベントリー内のホスト名が大きく異なっているとミスの原因になるため、インベントリー内のホスト名は実際のホスト名と同じ名前か他のホストと取り違いが起きない名前にすることをお勧めします。