1、Ansible簡介
html
ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於 paramiko 開發的,而且基於模塊化工做,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。ansible不須要在遠程主機上安裝client/agents,由於它們是基於ssh來和遠程主機通信的。ansible目前已經已經被紅帽官方收購,是自動化運維工具中你們承認度最高的,而且上手容易,學習簡單。是每位運維工程師必須掌握的技能之一。python
特色:ios
一、部署簡單,只需在主控端部署Ansible環境,被控端無需作任何操做;shell
二、默認使用SSH協議對設備進行管理;數據庫
三、有大量常規運維操做模塊,可實現平常絕大部分操做;centos
四、配置簡單、功能強大、擴展性強;bash
五、支持API及自定義模塊,可經過Python輕鬆擴展;服務器
六、經過Playbooks來定製強大的配置、狀態管理;網絡
七、輕量級,無需在客戶端安裝agent,更新時,只需在操做機上進行一次更新便可;架構
八、提供一個功能強大、操做性強的Web管理界面和REST API接口——AWX平臺。
架構:
Ansible:Ansible核心程序。
HostInventory:記錄由Ansible管理的主機信息,包括端口、密碼、ip等。
Playbooks:「劇本」YAML格式文件,多個任務定義在一個文件中,定義主機須要調用哪些模塊來完成的功能。
CoreModules:核心模塊,主要操做是經過調用核心模塊來完成管理任務。
CustomModules:自定義模塊,完成核心模塊沒法完成的功能,支持多種語言。
ConnectionPlugins:鏈接插件,Ansible和Host通訊使用。
運行過程:
Ansible 系統由控制主機對被管節點的操做方式可分爲兩類,即adhoc和playbook:
ad-hoc模式(點對點模式)
使用單個模塊,支持批量執行單條命令。ad-hoc 命令是一種能夠快速輸入的命令,並且不須要保存起來的命令。就至關於bash中的一句話shell。
playbook模式(劇本模式)
是Ansible主要管理方式,也是Ansible功能強大的關鍵所在。playbook經過多個task集合完成一類功能,如Web服務的安裝部署、數據庫服務器的批量備份等。能夠簡單地把playbook理解爲經過組合多條ad-hoc操做的配置文件。
命令執行過程:
一、加載本身的配置文件,默認/etc/ansible/ansible.cfg
;
二、查找對應的主機配置文件,找到要執行的主機或者組;
三、加載本身對應的模塊文件,如 command;
四、經過ansible將模塊或命令生成對應的臨時py文件(python腳本), 並將該文件傳輸至遠程服務器;
五、對應執行用戶的家目錄的.ansible/tmp/XXX/XXX.PY
文件;
六、給文件 +x 執行權限;
七、執行並返回結果;
八、刪除臨時py文件,sleep 0
退出;
2、Ansible安裝
Ansible 可以安裝到 Linux、BSD、Mac OS X 等平臺,Python 版本最低要求爲 2.6。
這次安裝在Centos 7環境下安裝:
使用命令: yum install ansible -y 安裝便可。
注:若沒法安裝,請更換Yum源倉庫再次嘗試安裝。
3、Cisco交換機配置
Cisco交換機須要配置SSH登陸.具體配置以下:
ip domain-name wlxbc.cn 配置域名
username cisco password 15 cisco 建立ssh用戶
crypto key generate rsa 建立密鑰
ip ssh version 2 設置SSH 版本
line vty 0 4 VTY配置
transport input ssh 只容許SSH協議傳輸
login local 本地登陸
4、Ansible運維操做
安裝完後正式來使用,ansible默認配置文件路徑爲:/etc/ansible;
修改ansible配置文件,將一下行註釋去掉
host_key_checking = False
這一行的意思是,在ssh登陸的時候,是檢查known_hosts文件中是否有該IP的密鑰。默認是檢查的,若是不存在,那麼就登陸失敗,這時候能夠經過手動ssh一次,ssh會自動將密鑰 添加入known_hosts文件中,或者經過取消註釋,使其不檢查文件。
設置完成後保存。
清空並配置hosts文件:echo > hosts
[cisco] # 組名
192.168.108.251 # 組成員
192.168.108.252
192.168.108.253
[centos]
192.168.100.225
ansible 192.168.100.225 -m ping -u root -k 測試ansible命令是否可達
Ansible經常使用命令:
ansible --list-host all 查詢全部主機
ansible IP地址 -m raw -a "show ip int brief" -u admin -k 執行單個主機
ansible cisco -m raw -a "show clock" -u admin -k 執行某個組
ansible all -m raw -a "show clock" -u admin -k 執行全部組
ansible-playbook arp.yml -u admin -k 執行劇本
ansible-playbook arp.yml -u admin -k | grep 'ok:\|8001' 執行劇本,匹配過濾
劇本:網絡模塊地址:https://docs.ansible.com/ansible/latest/modules/list_of_network_modules.html
參考配置:
查詢ARP:劇本
---
- name: Get ARP information
hosts: cisco
gather_facts: false
tasks:
- name: show arp
raw: "show arp"
register: print_output
- debug: var=print_output.stdout_lines
多條命令:
---
- name: run multiple commands on remote devices
hosts: all
gather_facts: false
connection: local
tasks:
- name: show ver and show ip int brief
ios_command:
commands:
- show clock
- show ip int brief
register: print_output
- debug: var=print_output.stdout_lines
配置交換機:
---
- name: enable ospf
hosts: all
gather_facts: false
connection: local
tasks:
- name: enable ospf
ios_config:
authorize: yes
parents: router ospf 2
lines:
- network 0.0.0.0 255.255.255.255 area 0
register: print_output
- debug: var=print_output