Ansible構成管理play-book
Play-book
Ansibleは、完全に単純なモデル駆動の構成管理、導入、コマンド実行フレームワークです.
ansibleのplaybookはsaltstackのstate systemに似た完全な構成管理フレームワークです
管理されているノードには、ソフトウェア依存およびansibleをインストールする必要はありません.
Playbookを使用する準備:管理ノードとしてマシンを選択し、ansible をインストールします.このマシンに管理するマシンのSSH鍵があることを確認します.ansibleはSSHログイン管理 を使用しているからです.ホストファイルを作成し、管理するノード情報をホストファイルに を追加します.
上記の3つのステップが正しく設定されていることを確認してください.次のコマンドを使用して検証できます.
ansibleはtestgroupの各ホストに接続され、必要なモジュールを各ノードに転送して実行し、モジュールの出力内容を返します.
ansibleには現在多くの管理モジュールがあり、これらのモジュールに基づいて等べき乗のplaybookを書くことができます.
このようなシーンをシミュレートし,ansibleのplaybookを用いてノードのDNSプロファイルを管理する.ここでは、以下の知識点を使用します. templateモジュールを使用して、テンプレートファイルを使用してdnsプロファイルのnameserver を動的に生成します. fetchモジュールを使用して、管理ノード上のdnsプロファイルfetchを管理ノード に渡す.テンプレートの使用、テンプレートファイル の作成
Playbook:
ここではまずhosts(target)を指定し、2つの変数nameとresolver-serverを宣言し、rootを使用して今回のtaskを実行し、tasksキーワードを使用して以下の内容を実行するタスクとして宣言し、タスクの詳細は機能に対するmoduleを呼び出す
Template:
ここでは定義された変数nameを参照し、フィルタを使用してupperに値を割り当てて大文字に変換します.次にansibleのfacts(saltstackのgrainsに似ている)を参照し、組み込まれたfacts変数はsetupモジュールを使用して表示できます(ansible testgroup-m setup).次にjinjaのifとfor構文を用いて変数の判断とループ参照を行う.
これまですべての仕事の準備ができていたので、これらの任務を走ることができます.
以上の出力から分かるように、2つのタスクが2つあり、両方のノードで正常に動作終了する.
fetchのファイル内容を表示するのも、私たちが予想していた結果です.
Ansibleは、完全に単純なモデル駆動の構成管理、導入、コマンド実行フレームワークです.
ansibleのplaybookはsaltstackのstate systemに似た完全な構成管理フレームワークです
管理されているノードには、ソフトウェア依存およびansibleをインストールする必要はありません.
Playbookを使用する準備:
上記の3つのステップが正しく設定されていることを確認してください.次のコマンドを使用して検証できます.
ansible testgroup -m ping
test1 | success >> {
"changed": false,
"ping": "pong"
}
lightcloud | success >> {
"changed": false,
"ping": "pong"
}
ansibleはtestgroupの各ホストに接続され、必要なモジュールを各ノードに転送して実行し、モジュールの出力内容を返します.
ansibleには現在多くの管理モジュールがあり、これらのモジュールに基づいて等べき乗のplaybookを書くことができます.
このようなシーンをシミュレートし,ansibleのplaybookを用いてノードのDNSプロファイルを管理する.ここでは、以下の知識点を使用します.
Playbook:
---
- hosts: testgroup
vars:
name: coocla
resolver-servers:
- 223.5.5.5
- 223.6.6.6
user: root
tasks:
- name: Deploy resolv.conf
template: src=files/resolv.j2 desc=/etc/resolv.conf mode=0444
- name: Fetch node file
fetch: src=/etc/resolv.conf desct=/tmp/fetchfile
ここではまずhosts(target)を指定し、2つの変数nameとresolver-serverを宣言し、rootを使用して今回のtaskを実行し、tasksキーワードを使用して以下の内容を実行するタスクとして宣言し、タスクの詳細は機能に対するmoduleを呼び出す
Template:
# resolv.j2 by {{ name | upper }}
# for {{ ansible_eth0.ipv4.address }}
{% if domain is defined -%}
domain {{ domain }}
{% endif -%}
{% for ns in resolvers -%}
nameserver {{ ns }}
{% endfor %}
ここでは定義された変数nameを参照し、フィルタを使用してupperに値を割り当てて大文字に変換します.次にansibleのfacts(saltstackのgrainsに似ている)を参照し、組み込まれたfacts変数はsetupモジュールを使用して表示できます(ansible testgroup-m setup).次にjinjaのifとfor構文を用いて変数の判断とループ参照を行う.
これまですべての仕事の準備ができていたので、これらの任務を走ることができます.
ansible-playbook learn-template.yml
PLAY [testgroup] **************************************************************
GATHERING FACTS ***************************************************************
ok: [test1]
ok: [lightcloud]
TASK: [Depoly resolv.conf] ****************************************************
changed: [test1]
changed: [lightcloud]
TASK: [Fetch node file] *******************************************************
changed: [test1]
changed: [lightcloud]
PLAY RECAP ********************************************************************
lightcloud : ok=3 changed=2 unreachable=0 failed=0
test1 : ok=3 changed=2 unreachable=0 failed=0
以上の出力から分かるように、2つのタスクが2つあり、両方のノードで正常に動作終了する.
cat /tmp/fetchfile/xxxx/etc/resolv.conf
# resolv.in by COOCLA
# for xxxx
nameserver 223.5.5.5
nameserver 223.6.6.6
fetchのファイル内容を表示するのも、私たちが予想していた結果です.