很多初學 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 」
你好,我是ansible得初学者。在自学中,目前遇到以下问题,查了很多资料都不行,想请教一下。
回覆刪除"changed": false,
"msg": "Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote temp path in ansible.cfg to a path rooted in \"/tmp\". Failed command was: ( umask 77 && mkdir -p \"` echo $HOME/.ansible/tmp/ansible-tmp-1586711281.83-115780261019156 `\" && echo ansible-tmp-1586711281.83-115780261019156=\"` echo $HOME/.ansible/tmp/ansible-tmp-1586711281.83-115780261019156 `\" ), exited with result 1, stdout output: \r\r\n\u0000******************************************************************************\r\r\n* Copyright (c) 2004-2017 New H3C Technologies Co., Ltd. All rights reserved.*\r\r\n* Without the owner's prior written consent, *\r\r\n* no decompiling or reverse-engineering shall be allowed. *\r\r\n******************************************************************************\r\r\n\r\r\n\u0000/bin/sh -c '( umask 77 && mkdir -p \"` echo $HOME/.ansible/tmp/ansible-tmp-1586711281.83-115780261019156 `\" && echo ansible-tmp-1586711281.83-115780261019156=\"` echo $HOME/.ansible/tmp/ansible-tmp-1586711281.83-115780261019156 `\" ) && sleep 0'\r\r\n ^\r\r\n % Unrecognized command found at '^' position.\r\r\n",
從您提供的日誌分析,應該是權限不足。
回覆刪除