日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ansible 修改文件变量_基于ansible的批量配置生成

發(fā)布時(shí)間:2024/9/27 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ansible 修改文件变量_基于ansible的批量配置生成 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

網(wǎng)絡(luò)運(yùn)維,我們有很多時(shí)間是在準(zhǔn)備配置的路上,咱們之前也講過,從腦海中或者是從自己的寶藏筆記中找出模板,一頓操作猛如虎,Ctrl C+ Ctrl V。這個(gè)過程是十分危險(xiǎn)的,因?yàn)槿瞬皇菣C(jī)器,肯定會(huì)出錯(cuò),放縱自己去放空自己去復(fù)制粘貼,出的配置,早晚要“濕鞋”。

我們之前講過用jinja2+python去生成配置,今天我們講講用ansible去生成配置,其底層實(shí)際也使用的是jinja2。但是借助于playbook和inventory文件(hosts),它可以幫助我們省去一些代碼,同時(shí)可以將生成的配置結(jié)合ansible去實(shí)現(xiàn)更復(fù)雜的內(nèi)容,比如推送到設(shè)備或者推送到git,比如將準(zhǔn)備的配置在下一個(gè)ansible的playbook中使用,或者是產(chǎn)生的配置是下一個(gè)task的任務(wù)等等。

廢話不多講,我們來看看如何用ansible批量生成配置,以及其中的一些技巧。

其中主要涉及到的知識(shí)點(diǎn)是template模塊的使用以及變量的定義。

我們演示的場(chǎng)景還是最簡(jiǎn)單的端口配置。看看如何快速生成端口配置。

jinja2模板引擎使用大家可以參考我之前的文章。

最簡(jiǎn)版:變量+jinja2模板

我們先來一個(gè)簡(jiǎn)單版本的。

簡(jiǎn)單版本首先要定義一個(gè)jinja2的模板文件,jinjia2的文件一般使用j2作為后綴。我們端口配置的j2如下:

{% for intf in interfaces %}
{{ intf[0] }}
description {{ intf[1]}}
{% endfor %}

其中我們把端口定義為這樣的一個(gè)數(shù)據(jù)格式 這個(gè)是在playbook中定義的。

interfaces:

這里我們把每個(gè)端口定義成了列表,其實(shí)也可以定義成dict字典,二者各有利弊,列表寫一行,看著舒坦,書寫簡(jiǎn)單。dict的key會(huì)讓整體可讀性更好,這個(gè)看大家的取舍。我這里偷個(gè)懶。

其中變量interfaces的名字與j2文件中的變量必須同名,這個(gè)是ansible的對(duì)應(yīng)模塊幫我們?nèi)プ詣?dòng)將interfaces與j2 render生成配置的,所以一定要同名。

然后我們來定義我們對(duì)應(yīng)的把變量render到模板中的task了。

-

這個(gè)template模塊,從上面的playbook來看很簡(jiǎn)單:

  • src:是本地jinja2模板的路徑。

  • dest:這個(gè)從官方和網(wǎng)上的一些資料去看,都是remote server的路徑。但是,針對(duì)網(wǎng)絡(luò)設(shè)備,這是一個(gè)本地的路徑。

還有一些和Linux文件相關(guān)的參數(shù),是否覆蓋,訪問權(quán)限等,默認(rèn)是覆蓋的,我們不是很關(guān)注。

dest我們說是remote server的路徑,這個(gè)其實(shí)描述的有點(diǎn)問題。對(duì)于host中的設(shè)備,如果是服務(wù)器,dest是遠(yuǎn)程服務(wù)器的路徑,但是針對(duì)網(wǎng)絡(luò)設(shè)備,這個(gè)dest是ansible主機(jī)(或者我們稱之為控制器)的本地路徑,這個(gè)大家要注意一下。

有興趣大家可以去看看template的源代碼,它是根據(jù)jinja2模板和變量生成配置,然后利用copy模塊把配置復(fù)制到遠(yuǎn)端服務(wù)器,如果是網(wǎng)絡(luò)設(shè)備,則會(huì)把內(nèi)容創(chuàng)建在本地(這個(gè)是我根據(jù)實(shí)驗(yàn)獲取一個(gè)結(jié)論,與connection的配置方式無關(guān),在源代碼中找這個(gè)邏輯找的也很模糊,作為網(wǎng)絡(luò)運(yùn)維人員,我們這樣簡(jiǎn)單理解我覺得是沒問題的)。

這個(gè)階段的playbook:

---

結(jié)果:

升級(jí)版:變量文件+jinja2模板

剛才的方式我們生成了配置,但是變量都寫在了一個(gè)playbook中,當(dāng)端口比較多的時(shí)候,這個(gè)playbook就顯得非常大,為了看實(shí)際運(yùn)行的內(nèi)容要拖好長(zhǎng)才能看到。

這個(gè)時(shí)候我們可以簡(jiǎn)單升級(jí)一下,把變量提取到一個(gè)指定的yaml文件,然后通過yaml文件描述我們的配置參數(shù)。

首先我們簡(jiǎn)單定義一個(gè)要配置的端口的yaml文件。

interfaces.yml:

---

定義好變量,我們把這個(gè)文件導(dǎo)入到playbook中.

---

結(jié)果:

我們對(duì)內(nèi)置變量vars_files進(jìn)行了賦值,進(jìn)而導(dǎo)入了我們的變量文件。我們可以導(dǎo)入多個(gè)變量文件。

如此,我們便可以將一個(gè)playbook固定下來,以后每次修改變量文件內(nèi)容批量生成配置文件,且可以重復(fù)利用。

這種適合于一些大批量的配置生成。

腦洞大開

延伸拓展:

  • 基于變量及文件配置自動(dòng)生成,我們可以固化一些常用的應(yīng)急場(chǎng)景,比如防火墻切換,將每組防火墻切換的變量文件準(zhǔn)備好,然后在應(yīng)急的時(shí)候去調(diào)用對(duì)應(yīng)的變量文件

  • 開局自動(dòng)化

  • 日常變更割接的模板管理、配置生成自動(dòng)化及推送自動(dòng)化

后續(xù):

  • 基于ansible,可以結(jié)合我們之前相關(guān)推送模塊,Cli的或者是廠商自帶的一些copy_config(從本地文件讀取寫入到設(shè)備
  • 通過自己的paramiko與netmiko腳本去推送配置
  • 用我們自己的配置推送工具去推送。一些大廠都會(huì)有自研或者購買的配置管理工具可以批量推送配置
  • 手刷(最不推薦)

今天就到這里結(jié)束,以上只是一部分演示。我們可以利用ansible與jinja2批量生成配置。

下一次,我們講講基于角色的playbook的編寫,可以與這個(gè)結(jié)合,按角色生成不同的配置。這種適用一些固定場(chǎng)景或者是重要變更或者是開局自動(dòng)化等等

感覺這次劃了水。下次分享計(jì)劃是RESTful API (與這個(gè)ansible的交叉著來),這個(gè)系列打算拆成3-5次去分享,因?yàn)閮?nèi)容其實(shí)有點(diǎn)多。

歡迎大家繼續(xù)關(guān)注、點(diǎn)贊、分享、喜歡、收藏、訂閱,推薦給你身邊的網(wǎng)工!

同名知乎專欄和微信公眾號(hào):NetDevOps加油站,歡迎你的加入!

codes:

  • https://gitee.com/feifeiflight/NetDevOpsShare/blob/master/codes/ansible_codes/templates_show.yml

  • https://gitee.com/feifeiflight/NetDevOpsShare/blob/master/codes/ansible_codes/templates_with_var_files_show.yml

總結(jié)

以上是生活随笔為你收集整理的ansible 修改文件变量_基于ansible的批量配置生成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。