ansible(五)variables(一)定義

來源:互聯網
上載者:User

標籤:使用者   ansible   variables   

說起變數,ansible中的變數,差不多等於salt-stack裡面的pillar+grains吧

ansible中的變數主要來源於,樓主總結了一下,大概有這麼幾個地方吧

  1. Inventory(host vars,group vars)

  2. playbook裡面

  3. 命令列

  4. playbook執行task過程中產生結果,可以register起來,作為變數給下面的task使用

  5. roles裡面

  6. 來自於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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.