使用Ansible同时在多个Cisco设备上执行相同的命令
由于希望在许多Cisco设备上执行相同的命令(主要是显示命令),所以尝试使用Ansible来执行。
在使用 shell 进行操作时,与之相比的一个重大区别是,如果能够很好地编写 Inventory 文件,就可以灵活地选择执行的目标位置。
与拥有许多 hosts 文件相比,使用 Inventory 文件进行修改时更加方便考虑。
请注意 Inventory 文件的访问权限,并停止包含凭据等敏感信息。
创建的文件
玩法:战略手册
只需要一个选项:将以下内容以中文进行本地化改写:one.yml
- hosts: "{{ host }}"
gather_facts: no
connection: local
tasks:
- name: one-shot
register: result
ios_command:
provider: "{{ cli }}"
commands: "{{ command }}"
- debug: var=result.stdout_lines
when: result|success
vars:
cli:
host: "{{ inventory_hostname }}"
username: "{{ ansible_user }}"
password: "{{ ansible_password }}"
authorize: true
auth_pass: "{{ ansible_net_auth }}"
库存文件
主持人
[group1]
host1
host2
[group2]
host3
host4
[all:children]
group1
group2
[all:vars]
ansible_user=login-username
ansible_password=login-password
ansible_net_auth=enable-password
外壳
一个.sh
#!/bin/bash
if [ $# -lt 2 ]; then
echo "usage $0 hostgroup command [command]..."
exit 1
fi
host="$1"
shift
cmd="["
for c in "$@"; do
cmd="${cmd}'${c}',"
done
cmd="${cmd%,}]"
ansible-playbook -i $(cd $(dirname $0) && pwd)/hosts $(cd $(dirname $0) && pwd)/one.yml -e "{\"command\":\"${cmd}\",\"host\":\"${host}\"}"
用法
或者
使用方法
./one.sh "host group name" "some command1" "some command2" "some command3" ...
或者
ansible-playbook -i hosts one.yml -e '{"host":"host group name","command":"some command"}'
ansible-playbook -i hosts one.yml -e '{"host":"host group name","command":"['some command','some command2','some command3'...]"}'