Ansible概述:
Ansible是一款自動化運(yùn)維工具,基于Python開發(fā),集合了眾多運(yùn)維工具 (Puppet、CFengine、Chef、SaltStack)的優(yōu)點(diǎn),實(shí)現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能。
Ansible是基于模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運(yùn)行的模塊,ansible只是提供一種框架。
Ansible支持豐富的的網(wǎng)絡(luò)模板:
網(wǎng)絡(luò)設(shè)備相關(guān)的模板請參照:
https://docs.ansible.com/ansible/2.9/modules/list_of_network_modules.html
例如:cisco ios模塊
Ansible原理:

Ansible對local本地的linux系統(tǒng)進(jìn)行配置;
Ansible通過SSH對node(例如網(wǎng)絡(luò)設(shè)備)進(jìn)行配置;
在其他linux上裝插件,management node通過插件和其他node進(jìn)行通信,完成自動化配置。
Ansible安裝:
Centos:
yum install -y epel-release
yum install -y enable
ansible --version //查看版本號
centos8默認(rèn)使用的是python3.6.8版本
ansible的重要文件:

ansible.cfg:ansible的系統(tǒng)配置文件。
hosts:定義登陸設(shè)備相關(guān)的文件。
解決SSH Known host key的問題:ssh第一次連接設(shè)備,都會彈出確認(rèn)密鑰的信息。有兩種方式可以解決:
hosts文件配置:
[CSR1] # 定義第一個(gè)設(shè)備的IP地址
192.168.0.66
[CSR2] # 定義第二個(gè)設(shè)備的IP地址
192.168.0.77
[CSR:children] # 將兩個(gè)設(shè)備加組
CSR1
CSR2
[CSR:vars]
ansible_become=yes # 說明設(shè)備有enable密碼,不需要的話可以跳過這一步
ansible_become_method=enable
ansible_become_password=‘cisco’ # enable密碼
ansible_password=‘Cisc0123’ # SSH密碼
ansible_user=‘prin’ # SSH賬號
ansible_connection=network_cli # 連接方式
ansible_network_os=ios
Playbook(劇本)簡介:
Playbook是由一個(gè)或多個(gè)"play"組成的列表。play的主要功能在于將事先歸為一組的主機(jī)裝扮成事先通過ansible中的task定義好的角色。從根本上來講,所謂的task無非是調(diào)用ansible的一個(gè)module(在上文給出的官方網(wǎng)站中去找)。將多個(gè)play組織在一個(gè)playbook中,即可以讓他們聯(lián)通起來按事先編排的機(jī)制同唱一臺大戲。
劇本本身是一個(gè)yaml文件,什么是yaml文件,請參考:https://blog.csdn.net/tushanpeipei/article/details/116883378?spm=1001.2014.3001.5501
例如:
可以在其中看到{{}},表示jinja2模板替換,我們通常需要在另外一個(gè)yaml文件中保存需要使用的數(shù)據(jù)。例如:
實(shí)驗(yàn)測試:
實(shí)驗(yàn)?zāi)康模?/strong>
完成CSR1和CSR2的基礎(chǔ)配置。
前提準(zhǔn)備:
兩臺CSR1000v設(shè)備,地址為192.168.0.66和192.168.0.77。
在兩臺設(shè)備上提前配置好SSH。
步驟一: 解決SSH Known host key的問題和配置hosts文件。
步驟二: 實(shí)驗(yàn)ping模塊測試連通性(實(shí)際上是用ping和ssh)
ansibleCSR-mping-o
CSR為組名,會測試組中所有的設(shè)備,連通性無誤后再進(jìn)行后續(xù)步驟。
步驟三: 找到需要配置的具體模塊,例如,需要配置接口的IP地址:
找到對應(yīng)的模板信息:
步驟四: 組織各個(gè)模板信息組成playbook并且組織記錄數(shù)據(jù)。
config_data.yaml:
---
csr_ifs:
-{ip:1.1.1.1/32,port:Loopback0,router:192.168.0.66}
-{ip:10.1.1.1/24,port:GigabitEthernet2,router:192.168.0.66}
-{ip:2.2.2.2/32,port:Loopback0,router:192.168.0.77}
-{ip:10.1.1.2/24,port:GigabitEthernet2,router:192.168.0.77}
csr_ospf_nets:
-{area:0,mask:0.0.0.0,network:1.1.1.1,router:192.168.0.66}
-{area:0,mask:0.0.0.255,network:10.1.1.0,router:192.168.0.66}
-{area:0,mask:0.0.0.0,network:2.2.2.2,router:192.168.0.77}
-{area:0,mask:0.0.0.255,network:10.1.1.0,router:192.168.0.77}
csr_ospf_router_id:
-{router:192.168.0.66,routerid:1.1.1.1}
-{router:192.168.0.77,routerid:2.2.2.2}
csr_domain_name:"cisco.com"
csr_name_servers:"114.114.114.1148.8.8.8"
csr_syslog_level:
-{dest:console,level:notifications}
csr_syslog_hosts:
-192.168.0.188
-192.168.0.166
csr_user_db:
-{username:qytadmin,privilege:15,password:Cisc0123}
-{username:otheradmin,privilege:1,password:Cisc0123}
...
csr_config_playbook.yaml:
---
-hosts:CSR#playbook操作的設(shè)備,這里是CSR組,包含CSR1和CSR2,也就是兩個(gè)設(shè)備都將執(zhí)行一遍playbook
gather_facts:fase
connection:local
vars_files:
-config_data.yaml#加載數(shù)據(jù)記錄的yaml文件
tasks:
-name:CSR_task_interface#ios_l3_interface(配置IP)
ios_l3_interfaces:
config:
-name:"{{item.port}}"#item為csr_ifs中的每一個(gè)元素,可以看到每個(gè)元素是一個(gè)字典,.port是提取其中port對應(yīng)的value,替換到模板中
ipv4:
-address:"{{item.ip}}"
with_items:"{{csr_ifs}}"#導(dǎo)入config_data.yaml中csr_ifs這個(gè)部分的配置內(nèi)容
when:(item.router==inventory_hostname)#條件判斷,當(dāng)IP地址等于router的IP才執(zhí)行此任務(wù),用于CSR1和CSR2配置不同的IP地址
-name:noshutdowninterface#ios_interface(打開接口)
ios_interfaces:
config:
-name:"{{item.port}}"
enabled:True
with_items:"{{csr_ifs}}"
when:(item.router==inventory_hostname)
-name:ospfrouter-id#ios_config(配置OSPF的router-id)
ios_config:
lines:
-router-id{{item.routerid}}
parents:routerospf1
with_items:"{{csr_ospf_router_id}}"
when:(item.router==inventory_hostname)
-name:ospfnetwork#ios_config(通告接口到OSPF進(jìn)程)
ios_config:
lines:
-network{{item.network}}{{item.mask}}area{{item.area}}
parents:routerospf1
with_items:"{{csr_ospf_nets}}"
when:(item.router==inventory_hostname)
-name:domain#配置域名
ios_system:
domain_name:"{{csr_domain_name}}"
-name:DNS#配置DNS
ios_system:
name_servers:
-"{{csr_name_servers}}"
-name:logging_level#配置日志level
ios_logging:
dest:"{{item.dest}}"
facility:local7
level:"{{item.level}}"
state:present
with_items:"{{csr_syslog_level}}"
-name:logging_host#配置logging服務(wù)器
ios_logging:
dest:host
name:"{{item}}"
state:present
with_items:"{{csr_syslog_hosts}}"
-name:ios_user#管理和創(chuàng)建用戶
no_log:true
ios_user:
name:"{{item.username}}"
privilege:"{{item.privilege}}"
configured_password:"{{item.password}}"
password_type:password
state:present
with_items:"{{csr_user_db}}"
-name:SAVECSRSCONFIG#任務(wù)名字
ios_config:#模塊名字
backup:yes#是否備份
save_when:modified#當(dāng)配置修改就保存配置
...
步驟五: 找到playbook文件,運(yùn)行:
ansible-playbookCSR_config_playbook.yaml

可以看到上述圖片中藍(lán)色的顯示,為skipping,也就是劇本里匹配條件沒有匹配到,跳過的步驟。
注意: 由于劇本的最后一個(gè)任務(wù)設(shè)置的備份配置,那么在哪運(yùn)行了劇本,會在哪個(gè)目錄下產(chǎn)生一個(gè)backup目錄,其中記錄了備份的配置。
審核編輯:劉清
-
Linux
+關(guān)注
關(guān)注
88文章
11582瀏覽量
217218 -
CSR
+關(guān)注
關(guān)注
3文章
118瀏覽量
70568 -
SSH
+關(guān)注
關(guān)注
0文章
197瀏覽量
17454 -
python
+關(guān)注
關(guān)注
56文章
4849瀏覽量
89246
原文標(biāo)題:網(wǎng)絡(luò)設(shè)備自動化運(yùn)維工具——ansible入門筆記
文章出處:【微信號:網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號:網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
誠聘高級運(yùn)維自動化工程師
銳捷助互聯(lián)網(wǎng)數(shù)據(jù)中心網(wǎng)絡(luò)自動化、可視化運(yùn)維
【深圳】誠聘運(yùn)維開發(fā)工程師
學(xué)習(xí)Linux運(yùn)維發(fā)展方向
厲害了!山東電力運(yùn)維自動化平臺正式投運(yùn)
Ansible企業(yè)級自動化運(yùn)維探索的詳細(xì)資料說明
一文詳解Ansible的自動化運(yùn)維
使用Ansible的OpenStack自動化

網(wǎng)絡(luò)設(shè)備自動化運(yùn)維工具—ansible入門筆記介紹
評論