自宅ではAnsibleを導入してから、以下OSやソフトウェアに対して作業のコード化や自動化を行ってきた。導入手順などは以下記事を参照。
OS/ソフトウェア | URL |
---|---|
Linux | AnsibleでLinuxサーバの初期設定と単体テストを行う |
Windows Server | AnsibleからWindows Serverに接続するための事前作業 |
vSphere ESXi | AnsibleでESXi上に仮想マシンを構築する |
今回は、Ansibleを使って物理スイッチであるCisco Business 250 (CBS250)を操作する手順を記載する。Cisco Business 250 (CBS250)は、Ansibleに標準で導入されているcommunity.ciscosmbというモジュールで操作可能となる。
注意事項
私の環境では何度かコマンド実行すると、ときおりcommand timeout triggered, timeout value is 30 secs.
のエラーでコマンド実行に失敗する事象が発生した。タイムアウト時間を延ばしてもうまくいかないが、しらばく時間を空けると成功するようになることまではわかっているが、解決には至らなかった。
環境
今回手順を確認した環境は以下の通り。
- コントロールノード
- OS : AlmaLinux 8.5
- Ansible : ansible [core 2.13.1]
jq
コマンドを使うため、あらかじめパッケージをインストールしておく
- スイッチ
- 機種 : Cisco Business 250 (CBS250-8T-E-2G)
- ファームウェアバージョン : 3.2.0.84
事前準備として、あらかじめCBS250に対して以下を実施しておく。
- SSH接続できるよう設定済みであること
- SSH用の一般ユーザを作成済みであること
enable
コマンド実行時のパスワードを設定済みであること
Cisco Business 250のconfigを取得するPlaybook
今回のPlaybookでは、show startup-config
を実行して取得したコンフィグをファイルとして保存する。
以下にPlaybookの内容を説明する。
Playbook説明
変数 (vars
)
Ansibleを使ってネットワーク機器を操作する際の変数は、以下の通り設定する。ポイントは、ansible_network_os
にcommunity.ciscosmb.ciscosmb
と設定することだ。それ以外は、Cisco IOSなどを操作する際と大きく設定は変わらない。
変数 | 設定値 |
---|---|
ansible_user | 任意のSSH接続用ユーザを設定。今回はciscoで設定。 |
ansible_password | 任意のSSH接続用ユーザのパスワードを設定。 |
ansible_connection | network_cli |
ansible_network_os | community.ciscosmb.ciscosmb |
ansible_become_method | enable |
ansible_become_password | enable コマンド実行時のパスワードを設定。 |
タスク (tasks
)
Playbookのタスクは以下の通り。
タスク | モジュール | 説明 |
---|---|---|
Exec command (show startup-config) | community.ciscosmb.command | show startup-config を実行した結果を変数に格納する。 |
Output file cbs250 configuration | ansible.builtin.copy | コンフィグが保存された変数の内容をファイルに出力する。出力結果はJSON形式になる。 |
Convert file cbs250 configuration | ansible.builtin.shell | JSON形式の出力結果をRAW形式に変換する。この処理はAnsibleのshellモジュールを用いてjq コマンドを用いてファイルを整形することで実現した。 |
Remove temp file | ansible.builtin.file | 整形前のJSON形式のファイルを削除する。 |
Playbook
以上をふまえ、Playbook全体は以下となる。
get_cbs250_config.yml
---
- name: Get cisco business 250 configuration
gather_facts: true
hosts: cbs250
vars:
ansible_user: cisco
ansible_password: 'P@ssw0rd'
ansible_connection: network_cli
ansible_network_os: community.ciscosmb.ciscosmb
ansible_become_method: enable
ansible_become_password: 'P@ssw0rd'
file_cbs250_config: "{{ lookup('env', 'PWD') }}/cbs250/{{ inventory_hostname }}_conf.log"
file_cbs250_config_tmp: "{{ lookup('env', 'PWD') }}/cbs250/{{ inventory_hostname }}_conf_tmp.log"
tasks:
# config取得
- name: Exec command (show startup-config)
community.ciscosmb.command:
commands: show startup-config
register: result
become: true
# configをファイル出力
- name: Output file cbs250 configuration
ansible.builtin.copy:
content: "{{ result.stdout_lines }}"
dest: "{{ file_cbs250_config_tmp }}"
mode: '0644'
delegate_to: localhost
# JSON形式からRAW形式に変換
- name: Convert file cbs250 configuration
ansible.builtin.shell: |
set -o pipefail && cat "{{ file_cbs250_config_tmp }}" | jq -r .[][] > "{{ file_cbs250_config }}"
changed_when: false
delegate_to: localhost
# 一時ファイルの削除
- name: Remove temp file
ansible.builtin.file:
path: "{{ file_cbs250_config_tmp }}"
state: absent
実行結果
Playbookの実行結果は以下の通り。
# ansible-playbook -i hosts get_cbs250_config.yml
PLAY [Get cisco business 250 configuration] *************************************************************************
TASK [Gathering Facts] **********************************************************************************************
ok: [cbs250]
TASK [Exec command (show startup-config)] ***************************************************************************
ok: [cbs250]
TASK [Output file cbs250 configuration] *****************************************************************************
changed: [cbs250 -> localhost]
TASK [Convert file cbs250 configuration] ****************************************************************************
ok: [cbs250 -> localhost]
TASK [Remove temp file] *********************************************************************************************
changed: [cbs250]
PLAY RECAP **********************************************************************************************************
cbs250 : ok=5 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
CBS250のconfigファイルも以下の通り出力される。
cbs250/cbs250_conf.log
config-file-header
cbs250
v3.2.0.84 / RCBS3.2_950_377_134
CLI v1.0
file SSD indicator encrypted
@
ssd-control-start
ssd config
ssd file passphrase control unrestricted
no ssd file integrity control
~(以下略)~
以上で、Ansibleを使って物理スイッチであるCisco Business 250 (CBS250)を操作する手順は完了となる。
0 件のコメント:
コメントを投稿