S小魚仔S 網誌搜尋

2019年10月31日 星期四

S小魚仔S Ansible 開發 H3C (華三) 交換機

很多初學 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