AnsibleでCisco NXOS(Nexus OS)へ接続する方法を説明します。Ansibleでサーバ機器を操作する場合はPythonスクリプトを他機器へ転送する挙動になりますが、ネットワーク機器を操作する場合は「network_cli」と呼ばれる特殊な接続方法を使用します。
ネットワーク機器を操作する時は「network_cli」を使うのが多数派です。ですが、BIG-IPは「local」と呼ばれる接続を使うように例外もある事もご留意ください。
事前準備
Cisco NXOS SSH接続の確認
Ansibleでネットワーク機器を操作するにはsshで接続する必要があります。telnetによる接続方法もありますが、telnetは従来のTeraTermマクロのようなexpectの仕組みを使うため、非常に難解な実装を求められます。そのため、特別な理由がない限りはsshを接続許可しましょう。
NXOSはSSH接続許可のための明示的な設定は必要ありません。それではSSHログインが可能である事を確かめましょう。
[root@ansible70 ~]# ssh 192.168.9.62 -l admin Warning: Permanently added '192.168.9.62' (RSA) to the list of known hosts. User Access Verification admin@192.168.9.62's password: Cisco NX-OS Software Copyright (c) 2002-2016, Cisco Systems, Inc. All rights reserved. NX-OSv software ("NX-OSv Software") and related documentation, files or other reference materials ("Documentation") are the proprietary property and confidential information of Cisco Systems, Inc. ("Cisco") and are protected, without limitation, pursuant to United States and International copyright and trademark laws in the applicable jurisdiction which provide civil and criminal penalties for copying or distribution without Cisco's authorization. Any use or disclosure, in whole or in part, of the NX-OSv Software or Documentation to any third party for any purposes is expressly prohibited except as otherwise authorized by Cisco in writing. The copyrights to certain works contained herein are owned by other third parties and are used and distributed under license. Some parts of this software may be covered under the GNU Public License or the GNU Lesser General Public License. A copy of each such license is available atandThe GNU General Public License v3.0 - GNU Project - Free Software Foundation*************************************************************************** * NX-OSv is strictly limited to use for evaluation, demonstration and * * NX-OS education. NX-OSv is provided as-is and is not supported by * * Cisco's Technical Advisory Center. Any use or disclosure, in whole or * * in part of the NX-OSv Software or Documentation to any third party for * * any purposes is expressly prohibited except as otherwise authorized by * * Cisco in writing. * *************************************************************************** R62#GNU Lesser General Public License v3.0 - GNU Project - Free Software Foundation
paramikoインストール
Ansibleでネットワーク機器を操作するにはparamikoと呼ばれるモジュールが必要です。paramiko未インストールの場合は以下のようなエラーメッセージが出力されます。
# ansible-playbook -i inventory.ini cisco_nxos_show_version.yml PLAY [cisco_nxos] ************************************************************** TASK [send show version] ******************************************************* fatal: [cisco62]: FAILED! => {"msg": "paramiko is not installed: No module named 'paramiko'"} PLAY RECAP ********************************************************************* cisco62 : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
それでは、paramikoをインストールしましょう。
pip install paramiko
インベントリファイルの作成
Cisco NXOSと接続できるよう以下のようなインベントリファイルを作成します。
cat << EOF > inventory.ini [cisco_nxos:vars] ansible_user = 'admin' ansible_password = 'P@ssw0rd' ansible_connection = 'network_cli' ansible_network_os = 'nxos' [cisco_nxos] cisco62 ansible_host=192.168.9.62 EOF
ansible_network_osはOSの種類によって適宜変更が必要です。NXOSを使用する場合は、「ansible_network_os」は「nxos」を指定します。
動作確認
「show version」を実行するプレイブックを作成します。
cat << EOF > cisco_nxos_show_version.yml --- - hosts: cisco_nxos gather_facts: no tasks: - name: send show version nxos_command: commands: "show version" EOF
疎通可能である事を確認するため、実行結果が「OK」となる事を確認します。
# ansible-playbook -i inventory.ini cisco_nxos_show_version.yml PLAY [cisco_nxos] ************************************************************** TASK [send show version] ******************************************************* ok: [cisco62] PLAY RECAP ********************************************************************* cisco62 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
現時点でshowコマンドの出力結果は表示されていませんが、showコマンドの結果を表示する方法は「Ansible操作例 – Cisco NXOSの操作方法の説明」で紹介します。