Ansibleでネットワーク機器の特定のステータスを取得してみる
Ansibleについての事前知識を記事にしたので興味がありましたらご確認ください。
ステータス取得用のディレクトリ作成とコーディング
Ansibleサーバ内にネットワーク機器(Cisco)のステータス確認用ディレクトリを作成します。
[user1@isnw-ice01 NW_statuscheck]$ pwd
/home/user1/ansible-playbook/NW_statuscheck
上記ディレクトリ内に下記ディレクトリを追加します。
├── group_vars
│ └── all
│ ├── login.yml
│ └── vault.yml
├── roles
│ └── tasks
│ └── main.yml
├── show_command.yml
└── target_hosts
- group_vars:変数に関わるファイル格納用
- login.yml:ネットワーク機器にSSHするためのログイン情報を記載
---
ansible_user: "user1"
ansible_password: "{{ vault_user1_password }}"
ansible_connection: ansible.netcommon.network_cli
ansible_network_os: cisco.ios.ios
ansible_port: 22
ansible_become: yes
ansible_become_method: enable
ansible_become_password: "{{ vault_cisco_enable_password }}"
- vault.yml:パスワードなど平文だとセキュリティ上問題がある文字列を変数で定義し記載
---
vault_user1_password: "nanndarone"
vault_cisco_enable_password: "cisco"
このままだとログインしたユーザーに平文で見えてしまうので、ansible-vaultコマンドを使って暗号化します。
ansible-vault encrypt group_vars/all/vault.yml
すると以下のような暗号化されたファイルになるため、セキュリティが向上します。
$ANSIBLE_VAULT;1.1;AES256
65643966613763323836616633356364643564326161633734373836393564663834633636623062
6335316531626366633531363765323632626562333732610a313564356265323164303036313631
(以下略)
- roles:関連するタスク、変数、ファイル、テンプレートなどをまとめて管理できます。今回は一つだけなのであまり意味はないです。
- tasks:実行するタスクファイルを格納します。
- main.yml:タスクファイルの中身です。今回はステータスチェックを実施するコードを書きます。
---
- name: "Check status"
ios_command:
commands:
- show int des
- show int status
- show ver
register: config
- name: show result
debug:
msg: "{{ config.stdout_lines }}"
- show_command.yml:実行するプレイブックです。今回はステータスチェックのみなので簡素です。
---
- name: "確認コマンドを実施します。"
hosts: host
gather_facts: no
roles:
- role: show
tags: show
- target_hosts:ステータス確認を実行する対象機器を記載する。
[host]
test-ansible-sw01 ansible_host="10.20.30.5"
test-ansible-sw02 ansible_host="10.20.30.6"
test-ansible-sw03 ansible_host="10.20.30.7"
test-ansible-sw04 ansible_host="10.20.30.8"
プレイブックを実行してみる
下記コマンドを実行し、実際にAnsibleを動かしてみます。vault化しているのでパスワードを入力してください。
ansible-playbook -i target_hosts show_command.yml --ask-vault-pass

長すぎるので省略しますが全ての機器で3つのステータス確認コマンドが実行されました。

最後のステータスが全てOKなら問題なく終了しています。


コメント