ansible-role

角色 role是ansible的一套規(guī)范

角色必須包含至少一個這樣的目錄丐怯,但是完全可以排除任何沒有使用的目錄液斜。在使用時混萝,每個目錄必須包含一個main.yml文件拜秧,其中包含相關(guān)內(nèi)容:

tasks目錄:

角色需要執(zhí)行的主任務(wù)文件放置在此目錄中,默認(rèn)的主任務(wù)文件名為main.yml老赤,當(dāng)調(diào)用角色時轮洋,默認(rèn)會執(zhí)行main.yml文件中的任務(wù),你也可以將其他需要執(zhí)行的任務(wù)文件通過include的方式包含在tasks/main.yml文件中抬旺。

handlers目錄:

當(dāng)角色需要調(diào)用handlers時弊予,默認(rèn)會在此目錄中的main.yml文件中查找對應(yīng)的handler

defaults目錄:

角色會使用到的變量可以寫入到此目錄中的main.yml文件中,通常开财,defaults/main.yml文件中的變量都用于設(shè)置默認(rèn)值汉柒,以便在你沒有設(shè)置對應(yīng)變量值時,變量有默認(rèn)的值可以使用责鳍,定義在defaults/main.yml文件中的變量的優(yōu)先級是最低的碾褂。

vars目錄:

角色會使用到的變量可以寫入到此目錄中的main.yml文件中,看到這里你肯定會有疑問历葛,vars/main.yml文件和defaults/main.yml文件的區(qū)別在哪里呢正塌?區(qū)別就是,defaults/main.yml文件中的變量的優(yōu)先級是最低的,而vars/main.yml文件中的變量的優(yōu)先級非常高乓诽,如果你只是想提供一個默認(rèn)的配置帜羊,那么你可以把對應(yīng)的變量定義在defaults/main.yml中,如果你想要確保別人在調(diào)用角色時鸠天,使用的值就是你指定的值讼育,則可以將變量定義在vars/main.yml中,因為定義在vars/main.yml文件中的變量的優(yōu)先級非常高稠集,所以其值比較難以覆蓋奶段。

meta目錄:

如果你想要賦予這個角色一些元數(shù)據(jù),則可以將元數(shù)據(jù)寫入到meta/main.yml文件中巍杈,這些元數(shù)據(jù)用于描述角色的相關(guān)屬性忧饭,比如 作者信息、角色主要作用等等筷畦,你也可以在meta/main.yml文件中定義這個角色依賴于哪些其他角色,或者改變角色的默認(rèn)調(diào)用設(shè)定刺洒,在之后會有一些實際的示例鳖宾,此處不用糾結(jié)。

templates目錄:

角色相關(guān)的模板文件可以放置在此目錄中逆航,當(dāng)使用角色相關(guān)的模板時鼎文,如果沒有指定路徑,會默認(rèn)從此目錄中查找對應(yīng)名稱的模板文件因俐。

files目錄:

角色可能會用到的一些其他文件可以放置在此目錄中拇惋,比如,當(dāng)你定義nginx角色時抹剩,需要配置https撑帖,那么相關(guān)的證書文件即可放置在此目錄中。

當(dāng)然澳眷,上述目錄并不全是必須的胡嘿,也就是說,如果你的角色并沒有相關(guān)的模板文件钳踊,那么角色目錄中并不用包含templates目錄衷敌,同理,其他目錄也一樣拓瞪,一般情況下缴罗,都至少會有一個tasks目錄。

測試:

[root@test1 tasks]# tree /etc/ansible/roles/
/etc/ansible/roles/
└── testrole
    ├── tasks
    │   └── main.yml
    └── test.yaml

[root@test1 testrole]# cat main.yml
- debug:
   msg: "hello,role"

[root@test1 testrole]# cat test.yaml 
---
- hosts: test2
  roles: 
  - testrole

[root@test1 testrole]# ansible-playbook test.yaml 

PLAY [test2] ********************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************
ok: [test2]

TASK [testrole : debug] *********************************************************************************************************************************************************************
ok: [test2] => {
    "msg": "hello,role"
}

PLAY RECAP **********************************************************************************************************************************************************************************
test2                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

其實祭埂,我們也可以為testvar變量設(shè)置默認(rèn)值面氓,這樣即使在調(diào)用角色時沒有傳入任何參數(shù),也有默認(rèn)的值可以使用,同時也不會在調(diào)用時因為沒有傳入對應(yīng)變量而報錯侧但,所以矢空,我們需要在testrole目錄中創(chuàng)建一個defaults目錄,并且創(chuàng)建defaults/main.yml文件禀横,defaults/main.yml文件內(nèi)容如下:

# cat testrole/defaults/main.yml
testvar: "role"

默認(rèn)情況下屁药,我們無法多次調(diào)用同一個角色,也就是說柏锄,如下playbook只會調(diào)用一次testrole角色:
方法一需要為角色設(shè)置allow_duplicates屬性酿箭,而此屬性需要設(shè)置在meta/main.yml文件中,所以我們需要在testrole中創(chuàng)建meta/main.yml文件趾娃,寫入如下內(nèi)容:

# cat testrole/meta/main.yml
allow_duplicates: true

假設(shè)現(xiàn)在testrole需要使用一些模板缭嫡,那么也可以直接將模板文件放到templates目錄中。

比如抬闷,testrole中需要使用一個名為test.conf.j2的模板文件妇蛀,那么我們就將test.conf.j2文件放置在testrole/templates/目錄中,test.conf.j2文件內(nèi)容如下

# cat testrole/templates/test.conf.j2
something in template;
{{ template_var }}

模板文件中使用到了 template_var變量笤成,我們可以為 template_var變量定義一個默認(rèn)變量

# cat testrole/defaults/main.yml
testvar: "test"
template_var: "template"

然后在testrole中评架,直接使用這個模板文件

# cat testrole/tasks/main.yml
- debug:
    msg: "hello {{ testvar }}!"
- template:
    src: test.conf.j2
    dest: /opt/test.conf
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市炕泳,隨后出現(xiàn)的幾起案子纵诞,更是在濱河造成了極大的恐慌,老刑警劉巖培遵,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浙芙,死亡現(xiàn)場離奇詭異,居然都是意外死亡籽腕,警方通過查閱死者的電腦和手機嗡呼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來节仿,“玉大人晤锥,你說我怎么就攤上這事±认埽” “怎么了矾瘾?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長箭启。 經(jīng)常有香客問我壕翩,道長,這世上最難降的妖魔是什么傅寡? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任放妈,我火速辦了婚禮北救,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芜抒。我一直安慰自己珍策,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布宅倒。 她就那樣靜靜地躺著攘宙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拐迁。 梳的紋絲不亂的頭發(fā)上蹭劈,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音线召,去河邊找鬼铺韧。 笑死,一個胖子當(dāng)著我的面吹牛缓淹,可吹牛的內(nèi)容都是我干的哈打。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼割卖,長吁一口氣:“原來是場噩夢啊……” “哼前酿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鹏溯,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淹仑,沒想到半個月后丙挽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡匀借,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年颜阐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吓肋。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡凳怨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出是鬼,到底是詐尸還是另有隱情肤舞,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布均蜜,位于F島的核電站李剖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏囤耳。R本人自食惡果不足惜篙顺,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一偶芍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧德玫,春花似錦匪蟀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至撒桨,卻和暖如春查刻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凤类。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工穗泵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谜疤。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓佃延,卻偏偏與公主長得像,于是被迫代替她去往敵國和親夷磕。 傳聞我的和親對象是個殘疾皇子履肃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355