一、Ansible簡介
Ansible是一個自動化運維的工具
基於python語言編寫,因此機器需要具備python環境。
通過ssh的連接方式進行自動化部署,ansible優先使用OpenSSH,在使用python模塊里的paramiko作為SSH工具
二、Ansible的優缺點
優點:
1.入門快速,簡單上手 2.基於Python語言 3.無代理(基於ssh,無需安裝客戶端,如zabbix的客戶端要安裝agent) 4.可讀性強(采用YAML格式)
缺點:
1.對Windows系統的排斥(服務端無法安裝在windows)
2.運行效率較低(task任務是串行運行;多台設備同時運行一個task,有並發數限制)
三、Ansible的安裝
安裝的是基於Python2.7的Ansible
在Ubuntu上的安裝
#1.增加PPA源,並安裝Ansible sudo apt-get unpdate sudo apt-get install software-properties-common sudo apt-add-repository --yes --update ppa:ansible/ansible sudo apt-get install ansible #2.查看版本,結果無報錯 ansible --version
在Centos7上的安裝
#1.安裝EPEL擴展軟件倉庫 sudo yum -y install epel-release #2.安裝Ansible sudo yum -y install ansible #3. 檢查ansible的版本和運行環境 ansible --version
四、Ansible的升級文檔
https://docs.ansible.com/ansible/2.7/porting_guides/porting_guides.html
此文檔為各個版本如何遷移到2.7版本,遷移有風險,操作需謹慎
五、Ansible框架介紹
5.1 框架圖
5.2 各組件功能
ansible.cfg #ansible的配置文件,包含各種Ansible全局性質的參數,可在不同項目下或者不同用戶下創建一樣的ansible.cfg文件,作為局部配置文件,檢索順序:局部-->全局 inventory #設備列表,當跑腳本時,需要告訴Ansible針對哪些設備或設備組 variable #變量 module #模塊,通過其他語言編寫而成,能實現某個特定的功能的工具,例如思科配置接口的模塊,修改ip地址的模塊等等 Jinja2 #模板系統,Ansible可實現批量配置網絡設備 Role #角色,一套文件夾,里面定義了例如變量,具體任務task。Role里面定義的內容可以實現某些特殊功能,而你在使用不通的腳本過程中可以導入Role來實現某一個功能。而不用重復寫 #以上的組件,會由以下的“客戶”來使用 Ad-hoc #即插即用,簡易模式,一條命令,一次使用 playbook #劇本,基於YAML文件格式書寫,可以包含Ansible任意功能,無論是設備列表,變量,jinja2模板,條件循環,模塊等等
5.3 inventory介紹
默認路徑是/etc/ansible/hosts文件,默認配置如下圖,此hosts為全局文件,可根據不通用戶或者不通項目設置局部文件,即在配件文件里指定ansible.cfg里的inventory=my_hosts
關於定義主機(默認編輯/etc/ansible/hosts文件),一般有兩種方式:
#方式一:直接定義IP 192.168.1.254 #方式二:直接定義域名,此方法本機的dns服務器需要能解析出此域名對應的ip地址,或者在自己的/etc/hosts文件里添加本地域名解析 pc1.test.com #方式二:定義特殊名稱,前提dns服務器或者/etc/hosts文件沒辦法解析此自定義名稱 #書寫格式:自定義名稱[空格]ansible_host=[主機IP] 如定義個R1 R1 ansible_host=192.168.1.254
示例:
需求: 定義一台網絡交換機192.168.1.254主機名為SW1,屬於network組,也屬於cisco組 定義一台pc,192.168.1.5,主機名PC1 定義一台pc,192.168.1.6 #實現: #步驟一:開啟ansible檢索inventory功能 編輯/etc/ansible/ansible.cfg inventory = /etc/ansible/hosts #將注釋#去掉 #步驟二:編輯/etc/ansible/hosts文件 PC1 ansible_host=192.168.1.5 192.168.1.6 [network] SW1 ansible_host=192.168.1.254 [cisco] 192.168.1.254 :wq #保存 ps:關於組的分割,ansible是通過匹配[]來判斷是否進入了下一個組,因此,未有分組的主機,只能放在組的上頭
六、Ansible簡單實例1
需求:測試主機是否存活(存活的意思是主機開了ssh端口)
實現:ansible localhost -m ping
#此處的ping模塊,並非傳統的ic'm'p ping原理,而是它嘗試使用默認的設定去ssh登陸遠端設備,如果登陸成功,就反饋:pong #ping模塊的使用: https://docs.ansible.com/ansible/latest/modules/ping_module.html#ping-module
七、Ansible簡單實例2
需求:執行一個linux命令,查看磁盤空間
實現:ansible localhost -m command -a "df -h"