Network機器をAnsibleで操作(?)してみた
RAWコマンドならいけるよねということで夜な夜な試してみましたメモです。今回、showコマンドやwr memなどしか試していないです。個人的には設定投入はエラー処理とか考えると他に任せたいなと思います。
Network機器でAnsibleの環境
新たに準備するのが面倒だったので以前に使ったvirtual boxで。古くてすいません。 opensshのバージョンは気にした方が良いです。理由は後述します。
$ ansible --version ansible 1.9.1 $ cat /etc/redhat-release CentOS release 6.5 (Final) $ sudo yum list installed | grep openssh openssh.x86_64 5.3p1-112.el6_7 @updates
Ansible設定
SFTPが開いていないデバイスのために念のためscp_if_ssh
をTrue
にしておきます。
セッションは1分あれば十分と判断し、60s
にしています。
$ more ansible.cfg [defaults] host_key_checking = False transport=ssh log_path=ansible.log [ssh_connection] scp_if_ssh=True ssh_args = -o ControlMaster=auto -o ControlPersist=60s
インベントリはメーカーごとに分けています。ここは環境により分けて頂ければと思います。
$ more hosts [all:vars] ansible_ssh_user=<username> ansible_ssh_pass=<password> [cisco] 1.1.1.1
冒頭に書いた通りrawモジュールを使ってコマンドを打ちます。 show runを出力するtaskと出力をローカルに保存するtaskを作っています。
$ more show-run.yml --- - hosts: cisco gather_facts: no tasks: - name: sh run raw : "show run" register: show_run - name: sh run output local_action: shell /bin/echo "{{ show_run.stdout }}" > /home/komei/ansible- test/sh_run_{{ inventory_hostname }}.txt
$ ansible-playbook show-run.yml -i hosts PLAY [cisco] ****************************************************************** TASK: [sh run] **************************************************************** ok: [1.1.1.1] TASK: [sh run output] ********************************************************* changed: [1.1.1.1 -> 127.0.0.1] PLAY RECAP ******************************************************************** 1.1.1.1 : ok=2 changed=1 unreachable=0 failed=0
$ ls -la -rw-rw-r-- 1 komei komei 689 Aug 24 23:55 sh_run_1.1.1.1.txt
1つイケてないのがインデントがなくすべて前詰めになってしまう点です。。copyコマンド入れてもプロンプトが出るし何かうまい方法ないかな。。 スイッチ側の設定を書いてないですが、Ansibleなので基本的にSSH開けておけばOKです。たた、個人的にはprivilegeレベルを下げたユーザでアクセスさせたいため、show runではなくwr mem & show confで動かすつもりです。↓みたいな感じ。
$ more show-conf.yml --- - hosts: cisco gather_facts: no tasks: tasks: - name: wr mem raw : "wr mem" - name: sh conf raw : "show conf" register: show_conf - name: sh conf output local_action: shell /bin/echo "{{ show_conf.stdout }}" > /home/komei/ansible -test/sh_conf_{{ inventory_hostname }}.txt
その他
エラーが出た時の対処
文言通りsshpassを入れてください
TASK: [sh run] **************************************************************** fatal: [1.1.1.1] => to use the 'ssh' connection type with passwords, you must install the sshpass program $ sudo yum install sshpass
opensshのバージョンによってはparamikoを使ってしまってtty周りで苦戦するかもしれません。
http://docs.ansible.com/ansible/intro_getting_started.html
However, when using Enterprise Linux 6 operating systems as the control machine (Red Hat Enterprise Linux and derivatives such as CentOS), the version of OpenSSH may be too old to support ControlPersist. On these operating systems, Ansible will fallback into using a high-quality Python implementation of OpenSSH called ‘paramiko’.
使いどころ
全台のwr memくらいなら有りかなくらいです。バージョンとかはSNMPでGETすれば良いと思いますし。ただ、RAWコマンドがうまく通らないメーカーもあったので、うーんという感じです。もう少し頑張ればわかるかな。。バックアップの仕組みはインデントの件もあるので、copyコマンドで吐き出した方が良いと思います。
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
- 作者: 若山史郎
- 発売日: 2014/07/30
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
- 作者: Lorin Hochstein
- 出版社/メーカー: O'Reilly Media
- 発売日: 2015/04/29
- メディア: Kindle版
- この商品を含むブログを見る