標籤:使用者 ansible variables
說起變數,ansible中的變數,差不多等於salt-stack裡面的pillar+grains吧
ansible中的變數主要來源於,樓主總結了一下,大概有這麼幾個地方吧
Inventory(host vars,group vars)
playbook裡面
命令列
playbook執行task過程中產生結果,可以register起來,作為變數給下面的task使用
roles裡面
來自於nodes上面的facts
這些類型的變數,1-4一般來說都是咱們使用者自己定義的,而5facts則主要是ansible從nodes上面拉取過來的,當然facts也可以自己定義。
下面咱們就來看看,這些變數是怎麼玩的吧?
先看看Inventory裡面的變數吧,這個第二篇的時候寫過,再寫一下吧
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/38/0A/wKioL1OyOnXg2xBFAAHrJW6zNzE525.jpg" title="jieguo.png" alt="wKioL1OyOnXg2xBFAAHrJW6zNzE525.jpg" />
再看看playbooks裡面的變數吧
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/38/0B/wKiom1OyOYfANSmPAACvKb0tTeg294.jpg" title="jieguo.png" alt="wKiom1OyOYfANSmPAACvKb0tTeg294.jpg" />
OK,大夥也看到了playbooks裡面可以定義變數,也可以匯入外部的檔案裡面的變數
好,大夥再一塊看看命令列裡面的變數吧。
命令列,傳遞變數給playbooks大概有三種方式吧
看看第1種方式吧,比較簡單了。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/38/0D/wKiom1OySC2wrcIoAAKsYn3qb5s087.jpg" title="jieguo.png" alt="wKiom1OySC2wrcIoAAKsYn3qb5s087.jpg" />
第2種方式,以json的格式傳遞變數。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/38/0C/wKioL1OySQnBWSrOAAHenL-EzXM119.jpg" title="jieguo.png" alt="wKioL1OySQnBWSrOAAHenL-EzXM119.jpg" />
第3種方法,傳入json檔案。不過,第二種,第三種方法,一般用於變數形式較複雜的情況。不過,一般估計很少用吧,因為在命令列傳遍了本來就不多用吧,還是第一種命令列傳遞方式稍微常用點。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/38/0D/wKiom1OySfjh98iOAAI2bf-giK0021.jpg" title="jieguo.png" alt="wKiom1OySfjh98iOAAI2bf-giK0021.jpg" />
OK,第四種方法,register task的結果,作為變數,給下面的task使用
看一下,小例子。這個比較簡單,就不列印結果了。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/38/19/wKiom1Oyo2SAZSeRAACUxR9Oc9I874.jpg" title="jieguo.png" alt="wKiom1Oyo2SAZSeRAACUxR9Oc9I874.jpg" />
OK,定義變數的第五種方法,在roles裡面。
這個就不多說了。上一篇剛寫過。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/38/0F/wKiom1OyS0rAetcRAAD1PyhWe0Y083.jpg" title="結果.png" alt="wKiom1OyS0rAetcRAAD1PyhWe0Y083.jpg" />
第六種方法,從nodes擷取facts,facts和salt-stack裡面的grains差不多,主要是nodes本身的一個系統資訊,bios資訊,網路,硬碟等等資訊。。不過樓主觀察了下,facts比salt-stack中的grains擷取的資訊。要更多一些。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/38/0F/wKiom1OyTPmTjRomAACSQ5taLp8855.jpg" title="jieguo.png" alt="wKiom1OyTPmTjRomAACSQ5taLp8855.jpg" />
OK,咱們在這裡說怎麼從nodes上擷取facts,前面咱們不是說了,可以自己定義facts嗎?
自訂facts有多種方法,有能力的同學,可以直接去修改,setup這個模組。不過官方的東西,咱們還是不要隨便改了。
第二種方法,定義在nodes上面,預設定義在/etc/ansible/fact.d/*fact裡面。
咱們定義在這裡面檔案的格式,有三種格式吧,分別是ini格式,json格式,或者可執行檔,不過他們返回的必須是json格式。
看個例子吧
先看看咱們定義的檔案內容分別為json,ini,及可執行檔指令碼的三個檔案吧
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/38/14/wKiom1OyZjPyXdyMAAGA_cFxbZQ734.jpg" title="json.png" alt="wKiom1OyZjPyXdyMAAGA_cFxbZQ734.jpg" />
OK,在node上建立檔案夾並把測試的fact檔案傳送過去。修改lss.fact這個檔案的屬性為其它組可執行檔許可權,否則待會執行不了,樓主用-s參數試了下,也執行不了
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/38/15/wKiom1OybHjiC4b5AAJl5VuIerU467.jpg" title="json.png" alt="wKiom1OybHjiC4b5AAJl5VuIerU467.jpg" />
好,這種自訂的方法,就算是說完了。還有一種自訂的方法,其實就是自訂模組,只不過這個模組,返回一個facts格式的結果罷了。
好,咱們在ansible的module裡面,自訂一個檔案夾,放咱們自己的module,然後丟給自訂的module進去
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/38/15/wKioL1Oyc_3DOsLfAAI2dFz6ahw112.jpg" title="module.png" alt="wKioL1Oyc_3DOsLfAAI2dFz6ahw112.jpg" />
OK,看到了吧,這裡面是從chengge這個模組裡面得到了一個輸出結果,但是我們咋用呢?
其實,我們想用模組裡返回的facts,那麼顯然,我們使用之前,肯定要先執行以下我們自訂的module
OK,看看這個例子吧
先看看playbooks
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/38/15/wKioL1OydVWTWNuuAACVUUgiIhc254.jpg" title="fact.png" alt="wKioL1OydVWTWNuuAACVUUgiIhc254.jpg" />
再看看,執行結果
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/38/15/wKioL1OydZiR2Sv-AAHVPuAM0dU904.jpg" title="jieguo.png" alt="wKioL1OydZiR2Sv-AAHVPuAM0dU904.jpg" />
本文出自 “西風” 部落格,請務必保留此出處http://lixcto.blog.51cto.com/4834175/1433138