Ansible概述:
Ansible是一款自動化運維工具,基于Python開發,集合了眾多運維工具 (Puppet、CFengine、Chef、SaltStack)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。
Ansible是基于模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。
Ansible支持豐富的的網絡模板:
網絡設備相關的模板請參照:
https://docs.ansible.com/ansible/2.9/modules/list_of_network_modules.html
例如:cisco ios模塊
Ansible原理:
Ansible對local本地的linux系統進行配置;
Ansible通過SSH對node(例如網絡設備)進行配置;
在其他linux上裝插件,management node通過插件和其他node進行通信,完成自動化配置。
Ansible安裝:
Centos:
yum install -y epel-release
yum install -y enable
ansible --version //查看版本號
centos8默認使用的是python3.6.8版本
ansible的重要文件:
ansible.cfg:ansible的系統配置文件。
hosts:定義登陸設備相關的文件。
解決SSH Known host key的問題:ssh第一次連接設備,都會彈出確認密鑰的信息。有兩種方式可以解決:
hosts文件配置:
[CSR1] # 定義第一個設備的IP地址
192.168.0.66
[CSR2] # 定義第二個設備的IP地址
192.168.0.77
[CSR:children] # 將兩個設備加組
CSR1
CSR2
[CSR:vars]
ansible_become=yes # 說明設備有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是由一個或多個"play"組成的列表。play的主要功能在于將事先歸為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來講,所謂的task無非是調用ansible的一個module(在上文給出的官方網站中去找)。將多個play組織在一個playbook中,即可以讓他們聯通起來按事先編排的機制同唱一臺大戲。
劇本本身是一個yaml文件,什么是yaml文件,請參考:https://blog.csdn.net/tushanpeipei/article/details/116883378?spm=1001.2014.3001.5501
例如:
可以在其中看到{{}},表示jinja2模板替換,我們通常需要在另外一個yaml文件中保存需要使用的數據。例如:
實驗測試:
實驗目的:
完成CSR1和CSR2的基礎配置。
前提準備:
兩臺CSR1000v設備,地址為192.168.0.66和192.168.0.77。
在兩臺設備上提前配置好SSH。
步驟一: 解決SSH Known host key的問題和配置hosts文件。
步驟二: 實驗ping模塊測試連通性(實際上是用ping和ssh)
ansibleCSR-mping-o
CSR為組名,會測試組中所有的設備,連通性無誤后再進行后續步驟。
步驟三: 找到需要配置的具體模塊,例如,需要配置接口的IP地址:
找到對應的模板信息:
步驟四: 組織各個模板信息組成playbook并且組織記錄數據。
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操作的設備,這里是CSR組,包含CSR1和CSR2,也就是兩個設備都將執行一遍playbook gather_facts:fase connection:local vars_files: -config_data.yaml#加載數據記錄的yaml文件 tasks: -name:CSR_task_interface#ios_l3_interface(配置IP) ios_l3_interfaces: config: -name:"{{item.port}}"#item為csr_ifs中的每一個元素,可以看到每個元素是一個字典,.port是提取其中port對應的value,替換到模板中 ipv4: -address:"{{item.ip}}" with_items:"{{csr_ifs}}"#導入config_data.yaml中csr_ifs這個部分的配置內容 when:(item.router==inventory_hostname)#條件判斷,當IP地址等于router的IP才執行此任務,用于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進程) 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服務器 ios_logging: dest:host name:"{{item}}" state:present with_items:"{{csr_syslog_hosts}}" -name:ios_user#管理和創建用戶 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#任務名字 ios_config:#模塊名字 backup:yes#是否備份 save_when:modified#當配置修改就保存配置 ...
步驟五: 找到playbook文件,運行:
ansible-playbookCSR_config_playbook.yaml
可以看到上述圖片中藍色的顯示,為skipping,也就是劇本里匹配條件沒有匹配到,跳過的步驟。
注意: 由于劇本的最后一個任務設置的備份配置,那么在哪運行了劇本,會在哪個目錄下產生一個backup目錄,其中記錄了備份的配置。
審核編輯:劉清
-
Linux
+關注
關注
87文章
11232瀏覽量
208949 -
CSR
+關注
關注
3文章
118瀏覽量
69602 -
SSH
+關注
關注
0文章
185瀏覽量
16308 -
python
+關注
關注
56文章
4783瀏覽量
84473
原文標題:網絡設備自動化運維工具——ansible入門筆記
文章出處:【微信號:網絡技術干貨圈,微信公眾號:網絡技術干貨圈】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論