使用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'...]"}'

广告
将在 10 秒后关闭
bannerAds