最初のコマンドおよび Playbook の実行

このクイックチュートリアルで作業するために学習した概念を記載します。Ansible をインストールし、ネットワーク設定コマンドを手動で実行し、Ansible で同じコマンドを実行してから Playbook を作成するため、複数のネットワークデバイスでいつでもコマンドを実行できます。

要件

このチュートリアルを実行する前に、以下が必要になります。

  • Ansible 2.5 (以降) がインストールされている
  • Ansible と互換性のある 1 つ以上ネットワークデバイス
  • 基本的な Linux コマンドラインのナレッジ
  • ネットワークスイッチおよびルーター設定に関する基本知識

Ansible のインストール

希望する方法を使用して、Ansible をインストールします。Ansible のインストール を参照してください。その後、このチュートリアルに戻ります。

Ansible のバージョンを確認します (2.5 以下である必要があります)。

ansible --version

管理ノードへの手動接続の確立

認証情報を確認するには、手動でネットワークデバイスに接続し、その設定を取得します。サンプルユーザーとデバイス名を実際の認証情報に置き換えます。たとえば、VyOS ルーターの場合は、以下のようになります。

ssh [email protected]
show config
exit

この手動接続により、ネットワークデバイスの信頼性も確立され、既知のホストの一覧に RSA 鍵フィンガープリントが追加されます。(以前にデバイスを接続したことがある場合は、その信頼性がすでに確立されています。)

最初のネットワーク Ansible コマンドの実行

ネットワークデバイスでコマンドを手動で接続して実行する代わりに、1 つの削除済み Ansible コマンドで設定を取得できます。

ansible all -i vyos.example.net, -c network_cli -u my_vyos_user -k -m vyos_facts -e ansible_network_os=vyos
このコマンドのフラグは、7 つの値を設定します。
  • コマンドを適用するホストグループ (この場合は all)
  • インベントリー (-i, ターゲットに設定するデバイス (最後のコンマがない -i はインベントリーファイルを指定なし))
  • 接続方法 (-c、ansible の接続方法および実行方法)
  • ユーザー (-u、SSH 接続のユーザー名)
  • SSH 接続の方法 (-k、パスワードのプロンプト有り)
  • モジュール (-m、実行する ansible モジュール)
  • 追加変数 (-e、この場合は、ネットワーク OS 値の設定)

注記:ssh 鍵で ssh-agent を使用する場合、Ansible は自動的にこれを読み込みます。-k フラグは省略できます。

最初のネットワークの Ansible Playbook の作成および実行

このコマンドを毎日実行する必要がある場合には、Playbook に保存し、ansible の代わりに ansible-playbook を使用して実行します。Playbook はコマンドラインにフラグを付けて指定した多くのパラメーターを保存でき、コマンドラインに入力を少なくすることができます。これには、2 つのファイル (Playbook とインベントリーファイル) が必要です。

  1. first_playbook.yml をダウンロードします。これは以下のようになります。
---

- name: Network Getting Started First Playbook
  connection: network_cli
  gather_facts: false
  hosts: all
  tasks:

    - name: Get config for VyOS devices
      vyos_facts:
        gather_subset: all

    - name: Display the config
      debug:
        msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"

Playbook は、上記のコマンドラインの 7 つの中から 3 つの値 (グループ (hosts: all)、接続方法 (connection: network_cli) 、およびモジュール (各タスク)) を選択します。これらの値が Playbook に設定されると、それらをコマンドラインで省略できます。Playbook は、config 出力を表示する別のタスクも追加します。Playbook でモジュールが実行されると、出力はコンソールに書き込まれるのではなく、今後のタスクで使用するためにメモリーに保持されます。ここでのデバッグタスクを使用すると、シェルで結果を確認できます。

  1. 以下のコマンドを使用して Playbook を実行します。
ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos first_playbook.yml

Playbook には、2 つのタスクを持つプレイが 1 つ含まれており、次のような出力が生成されます。

$ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos first_playbook.yml

PLAY [First Playbook]
***************************************************************************************************************************

TASK [Get config for VyOS devices]
***************************************************************************************************************************
ok: [vyos.example.net]

TASK [Display the config]
***************************************************************************************************************************
ok: [vyos.example.net] => {
    "msg":"The hostname is vyos and the OS is VyOS"
}
  1. デバイス設定を取得できるようになったため、Ansible での更新を試行してください。最初の Playbook の拡張バージョンである first_playbook_ext.yml をダウンロードします。
---

- name: Network Getting Started First Playbook Extended
  connection: network_cli
  gather_facts: false
  hosts: all
  tasks:

    - name: Get config for VyOS devices
      vyos_facts:
        gather_subset: all

    - name: Display the config
      debug:
        msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"

    - name: Update the hostname
      vyos_config:
        backup: yes
        lines:
          - set system host-name vyos-changed

    - name: Get changed config for VyOS devices
      vyos_facts:
        gather_subset: all

    - name: Display the changed config
      debug:
        msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"

最初の Playbook の拡張では、1 つのプレイに 4 つのタスクがあります。上記と同じコマンドで実行します。この出力では、Ansible が設定に加えられた変更が表示されます。

$ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos first_playbook_ext.yml

PLAY [First Playbook]
************************************************************************************************************************************

TASK [Get config for VyOS devices]
**********************************************************************************************************************************
ok: [vyos.example.net]

TASK [Display the config]
*************************************************************************************************************************************
ok: [vyos.example.net] => {
    "msg":"The hostname is vyos and the OS is VyOS"
}

TASK [Update the hostname]
*************************************************************************************************************************************
changed: [vyos.example.net]

TASK [Get changed config for VyOS devices]
*************************************************************************************************************************************
ok: [vyos.example.net]

TASK [Display the changed config]
*************************************************************************************************************************************
ok: [vyos.example.net] => {
    "msg":"The hostname is vyos-changed and the OS is VyOS"
}

PLAY RECAP
************************************************************************************************************************************
vyos.example.net           : ok=6    changed=1    unreachable=0    failed=0

ネットワークデバイスからのファクトの収集

gather_facts キーワードが、標準化された鍵と値のペアでネットワークデバイスファクトの収集に対応するようになりました。これらのネットワークファクトをさらにタスクに送信して、ネットワークデバイスを管理できます。

また、新しい gather_network_resources パラメーターを、ネットワークの *_facts モジュール (eos_facts など) とともに使用すると、以下のようにデバイス設定のサブセットのみを返すことができます。

- hosts: arista
  gather_facts:True
  gather_subset: min
  module_defaults:
    eos_facts:
      gather_network_resources: interfaces

Playbook は以下のインターフェースのファクトを返します。

ansible_facts:
   ansible_network_resources:
      interfaces:
      - enabled: true
        name:Ethernet1
        mtu:'1476'
      - enabled: true
        name:Loopback0
      - enabled: true
        name:Loopback1
      - enabled: true
        mtu:'1476'
        name:Tunnel0
      - enabled: true
        name:Ethernet1
      - enabled: true
        name:Tunnel1
      - enabled: true
        name:Ethernet1

これは、gather_subset: interfaces を設定するだけで返される内容のサブセットを返すことに注意してください。

これらのファクトを保存し、eos_interfaces リソースモジュールなどの別のタスクで直接使用できます。