技術を楽しもう!

IT(ネットワーク)業界を中心に、仕事や趣味等、色々な技術を記録します。

Ansibleでネットワーク機器の動作確認を自動化する

f:id:takashi-tobey:20201020175024p:plain

数年前にちょっとした処理をAnsibleで書いたことがあったのですが、 バージョンアップ等でPlaybookの書き方が変わることが多く、 久しぶりに触ったのでメモがてら記録しておきます。

変数を外部ファイルから読み込む

◆Playbook

- hosts: HOGEHOGE
    gather_facts: no
    vars_files:
      - ../vars/var.yml

  tasks:
    - name: Check HOGEHOGE

◆var.yml

ansible_connection: network_cli
ansible_network_os: ios
ansible_user: admin
ansible_ssh_pass: password
interface: Gi1/0/1

コマンドに変数を使うとinvalid inputになる

直接 show int Gi1/0/1とすると問題ないのですが、 以下のような例ではエラーになってしまいます。

◆ダメな例

下記のように変数部分のみをダブルクォーテーションで囲むと、 invalid inputになってしまいます。

  tasks:
    - name: TEST
      ios_command:
        commands:
          - show int "{{interface}}"
◆OK例

コマンド部分は、変数部分も含めて全体をダブルクォーテーションで囲んだ方が良さそうです。

  tasks:
    - name: TEST
      ios_command:
        commands:
          - "show int {{interface}}"
  tasks:
    - name: TEST
      ios_command:
        commands:
          - show int {{interface}}

コマンド結果を確認する行を絞る

show コマンド等で出力が長い場合は、 必要な出力が何行目にあるかを把握したうえで、wait_forで判定するとよさそうです。 下記はshow version の1行目だけを表示する例です。

  tasks:
    - name: TEST
      ios_command:
        commands:
          - "show version"
      register: result

    - name: debug
      debug:
        msg: "{{ result.stdout_lines[0][0] }}"