Python が入っていない NW 機器も Ansible で (一応) 制御できる (original : 2015/02/15)
この記事は某所で 2015/02/15
に書いたもののコピーです。
そのため 2017/05/13
時点ではやや古い情報も含まれています。(以下一例)
Ansible
のバージョンが当時の1.8
から2.3
くらいまであがっているので、挙動が異なる部分がある筈
.
概要
本項でやること
target に python が入っていなくても ssh 接続可能ならば Ansible で一応制御できる、ということを軽く確認します。 Linux ベースではないネットワーク機器(Cisco IOS etc)などで使える筈です。
気をつけること(≒結論)
ansible:1.8.2
では、以下を満たせばいける筈です。
gather_facts
はno
にすること- コマンド実行 module は
raw
を使うこと (shell
やcommand
ではない) ssh
のcommand
で target にリモートコマンド実行できること
参考情報(公式より)
何でコマンド実行 module として raw
を使うのか
Ansible の config ファイルで使える ssh 系のオプション設定
環境情報
Ansible
target device (NW機器)
Python が入っていない NW 機器代表として Juniper Firefly を使いました。 FreeBSD ベースではありますが。
- OS:12.1X47-D10.4
サンプル
設定ファイル/Playbook
hosts
実行時に --ask-pass
とか使ったり、環境変数を使ったりでパスワードベタ書きは回避可能です。
[junos] 192.168.101.70 [junos:vars] ansible_ssh_user=kotetsu ansible_ssh_pass=kotetsu
ansible.cfg
ssh 接続に Paramiko と OpenSSH のいずれを使うか、という話がありますが…今回はオプションが豊富な OpenSSH を使っています。
[defaults] transport=ssh [ssh_connection] ssh_args= -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ControlMaster=no -o ControlPersist=60s scp_if_ssh=false
Playbook
単純に ssh の command で show version | no-more
を実行して、結果を debug で表示させるだけです。
- name: not support Python node hosts: junos gather_facts: no sudo: false tasks: - name: show version raw: show version | no-more register: output_show_version - debug: var=output_show_version
実行例
$ ansible-playbook playbook_junos.yml -i hosts PLAY [not support Python node] ************************************************ TASK: [show version] ********************************************************** ok: [192.168.101.70] TASK: [debug var=output_show_version] ***************************************** ok: [192.168.101.70] => { "output_show_version": { "invocation": { "module_args": "show version | no-more", "module_name": "raw" }, "rc": 0, "stderr": "", "stdout": "Could not chdir to home directory /var/home/kotetsu: No such file or directory\r\nHostname: fw01\r\nModel: firefly-perimeter\r\nJUNOS Software Release [12.1X47-D10.4]\r\n", "stdout_lines": [ "Could not chdir to home directory /var/home/kotetsu: No such file or directory", "Hostname: fw01", "Model: firefly-perimeter", "JUNOS Software Release [12.1X47-D10.4]" ] } } PLAY RECAP ******************************************************************** 192.168.101.70 : ok=2 changed=0 unreachable=0 failed=0