很多初學 ansible 的都會誤以為,ansible 是 ssh 到目的主機上,然後直接運行 cli 命令,其實並不是,ansible 對管理網路設備雖然不需要安裝 agent,但是需要其擁有「python」。「ansible」主機會把需要執行的「module」(完成特定功能的python程式) 傳送到目的主機去執行,因此我們其實需要一個「moudle」能完成「ssh」到網路設備上並下發指定命令的功能。Ansible Host 安裝 Python 我們完全可以透過「Ansible Host」下發指令,這樣就不需要「ansible」通過「paramiko」傳輸「module」,只需要在設定檔(vi /etc/ansible/hosts)中指定「connection」為「local」即可。
PS. H3C 網路設備必須啟用「ssh」登入
1. 修改「vi /etc/ansible/hosts」設定「交換機」IP 為 local
2. 編輯「vi /etc/ansible/ansible.cfg」啟用「library」模組
3. 建立「my_modules」資料夾
mkdir -p /usr/share/my_modules/
4. 下載 GitHub 作者「luffycjf」( network_automation ) 開發「模塊」
cd /opt ; git clone https://github.com/luffycjf/network_automation
5. 搬移「ssh_command.py」模塊,放到「ansible library」位置
mv /opt/network_automation/module/ssh_command.py /usr/share/my_modules/
6. 編寫「ansible - playbook」
PS. Playbook 採用 yml 描述語言檔,縮排位置一定要對齊
- hosts: localhost
gather_facts: no
vars:
- ssh_port: 22 #ssh端口号
ssh_username: "test" #设备用户名
ssh_password: "test2019" #设备密码
device_address: "172.21.6.2" #设备地址
command_interval: 0.5 #命令之间等待的最小间隔,默认0.5s,可以不改
tasks:
# command: '' #指定操作的命令。
# configfile: '/opt/h3c_switch/h3c_config.txt' #指定操作「h3c」配置腳本。
- name: display version
ssh_command:
port: "{{ssh_port}}"
address: "{{device_address}}"
username: "{{ssh_username}}"
password: "{{ssh_password}}"
command_interval: 0.1
command: 'display ip interface brief'
configfile: ''
register: h3c_log
- name: print h3c_log
debug:
var: h3c_log.stdout_lines
with_items: h3c_log.results
7. 執行結果
參考資料
「Cheng's Blog」-「网络设备配置建模 Ⅰ」
「Ansible Web Site」-「Ansible for Network Automation 」