定義了一個test的角色牵敷,實現(xiàn)一個簡單的功能越锈,即輸出”hello role”
調(diào)用test角色時敬辣,test.yml會從如圖所示幾個目錄去尋找
同級目錄中查找與test角色同名的目錄
同級目錄中的roles目錄中
當(dāng)前系統(tǒng)用戶的家目錄中的.ansible/roles目錄滤祖,即 ~/.ansible/roles目錄中
/etc/ansible/ansible.cfg配置文件讼渊,roles_path選項的默認(rèn)配置
在roles關(guān)鍵字中使用role關(guān)鍵字指定角色對應(yīng)的絕對路徑,也可以直接調(diào)用角色
嘗試一下在角色中使用變量
需要注意的是,在默認(rèn)情況下躲撰,角色中的的變量是全局可訪問的针贬。請看下面的例子:
給test击费、test1定義了一個“testvar”的變量
簡單的task為輸出變量
預(yù)期是 test角色輸出“hello role !” ;? ?test1角色輸出“hello role2 !”? 實則不然
如上結(jié)果拢蛋,test和test1均輸出“hello role !”。這是因為在默認(rèn)情況下蔫巩,角色中的變量是全局可訪問的谆棱。
如果想要解決上述問題,則可以將變量的訪問域變成角色所私有的圆仔,如果想要將變量變成角色私有的垃瞧,則需要設(shè)置/etc/ansible/ansible.cfg文件,將private_role_vars的值設(shè)置為yes坪郭,默認(rèn)情況下个从,”private_role_vars = yes”是被注釋掉的,將前面的注釋符去掉皆可歪沃,設(shè)置完成后嗦锐,再次執(zhí)行上例中的test.yml文件,輸出結(jié)果如下:
默認(rèn)情況下沪曙,我們無法多次調(diào)用同一個角色奕污,也就是說,如下playbook只會調(diào)用一次test角色:
執(zhí)行上例playbook會發(fā)現(xiàn)液走,testrole的debug模塊只輸出了一次碳默,如果想要多次調(diào)用同一個角色,有兩種方法缘眶,如下:
方法一:設(shè)置角色的allow_duplicates屬性 嘱根,讓其支持重復(fù)的調(diào)用。
方法二:調(diào)用角色時巷懈,傳入的參數(shù)值不同该抒。
方法一需要為角色設(shè)置allow_duplicates屬性,而此屬性需要設(shè)置在meta/main.yml文件中砸喻,所以我們需要在test中創(chuàng)建meta/main.yml文件柔逼,寫入如下內(nèi)容:
方法二,當(dāng)調(diào)用角色需要傳參時割岛,如果參數(shù)的值不同愉适,則可以連續(xù)調(diào)用多次。
通過vars/main.yml文件來定義變量
總結(jié)變量優(yōu)先級:使用”-e”傳入的變量? >? vars/main.yml? >?test.yml >?defaults/main.yml
假設(shè)現(xiàn)在test需要使用一些模板癣漆,那么也可以直接將模板文件放到templates目錄中维咸。
模板文件中使用到了 template_var變量,我們可以為 template_var變量定義一個默認(rèn)變量
如果你想要在角色中使用一些handlers以便進(jìn)行觸發(fā),則可以直接將對應(yīng)的handler任務(wù)寫入到handlers/main.yml文件中癌蓖,示例如下:
參考鏈接:https://www.zsythink.net/archives/3063