Ansible構成管理play-book


Play-book
Ansibleは、完全に単純なモデル駆動の構成管理、導入、コマンド実行フレームワークです.
ansibleのplaybookはsaltstackのstate systemに似た完全な構成管理フレームワークです
管理されているノードには、ソフトウェア依存およびansibleをインストールする必要はありません.
Playbookを使用する準備:
  • 管理ノードとしてマシンを選択し、ansible
  • をインストールします.
  • このマシンに管理するマシンのSSH鍵があることを確認します.ansibleはSSHログイン管理
  • を使用しているからです.
  • ホストファイルを作成し、管理するノード情報をホストファイルに
  • を追加します.
    上記の3つのステップが正しく設定されていることを確認してください.次のコマンドを使用して検証できます.
    ansible testgroup -m ping
     
    test1 | success >> {
        "changed": false,
        "ping": "pong"
    }
     
    lightcloud | success >> {
        "changed": false,
        "ping": "pong"
    }

    ansibleはtestgroupの各ホストに接続され、必要なモジュールを各ノードに転送して実行し、モジュールの出力内容を返します.
    ansibleには現在多くの管理モジュールがあり、これらのモジュールに基づいて等べき乗のplaybookを書くことができます.
    このようなシーンをシミュレートし,ansibleのplaybookを用いてノードのDNSプロファイルを管理する.ここでは、以下の知識点を使用します.
  • templateモジュールを使用して、テンプレートファイルを使用してdnsプロファイルのnameserver
  • を動的に生成します.
  • fetchモジュールを使用して、管理ノード上のdnsプロファイルfetchを管理ノード
  • に渡す.
  • テンプレートの使用、テンプレートファイル
  • の作成
    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のファイル内容を表示するのも、私たちが予想していた結果です.