在ansible中有很多種定義變量的方式,我們沒必要去關(guān)注太多,只需要掌握幾個常用的變量定義和應(yīng)用方式即可,這篇文章記錄的是將變量定義在外部文件中,然后去引入這些外部文件中的變量。
額敏ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
引入保存了變量的文件有兩種方式:include_vars和vars_files。此外,還可以在命令行中使用“-e”或“--extra-vars”選項來引入。
vars_files是一個play級別的指令,可用于在解析playbook的截斷引入一個或多個保存了變量的外部文件。
例如,pb.yml文件如下:
---
- name: play1
hosts: node
gather_facts: false
vars_files:
- varfile1.yml
- varfile2.yml
tasks:
- debug:
msg: "var in varfile1: {{var1}}"
- debug:
msg: "var in varfile2: {{var2}}"
pb.yml文件通過vars_files引入了兩個變量文件,變量文件的語法格式如下:
[root@ansible roles]# cat varfile1.yml #第一個變量文件內(nèi)容如下
---
var1: "value1"
var11: "value11"
[root@ansible roles]# cat varfile2.yml #第二個變量文件內(nèi)容如下
---
var2: "value2"
var22: "value22"
注意:vars_files指令是play級別的指令,且是在解析playbook的時候加載并解析的,所以所引入的變量是play范圍內(nèi)可用的,其他play不可使用這些變量。
include_vars指令也可用于引入外部變量文件,它和vars_files不同,一方面,include_vars是模塊提供的功能,它是一個實實在在的任務(wù),所以在這個任務(wù)執(zhí)行之后才會創(chuàng)建變量。另一方面,既然include_vars是一個任務(wù),他就可以被一些task級別的指令控制,如when指令。
栗子如下:
[root@ansible roles]# cat include_vars.yml
---
- name: play1
hosts: localhost
gather_facts: false
tasks:
- name: include vars from files
include_vars: varfile1.yml
when: 3 > 2
- debug:
msg: "var in varfile1:{{var1}}"
上面的栗子中引入變量文件的方式是直接指定文件名,include_vars: varfile1.yml,也可以明確使用file參數(shù)來指定路徑,如下:
- name: include vars from files
include_vars:
file: varfile1.yml
如果想要引入多個文件,可以使用循環(huán)的方式,例如:
- name: include vars from files
include_vars:
file: "{{item}}"
loop:
- varfile1.yml
- varfile2.yml
需要注意的是,include_vars在引入文件的時候要求已經(jīng)存在,如果有多個可能的文件但不確定文件是否已經(jīng)存在,可以使用with_first_found指令或者lookup的first_found插件,他們的作用相同,都用于從文件列表中找出存在的文件,找到后立即停止。
栗子如下:
tasks:
- name: include vars from files
include_vars:
file: "{{item}}"
with_first_found:
- varfile1.yml
- varfile2.yml
- default.yml
#等價于
tasks:
- name: include vars from files
include_vars:
file: "{{ lookup('first_found',any_files) }}"
vars:
any_files:
- varfile1.yml
- varfile2.yml
- default.yml
此外,include_vars還能從目錄中導(dǎo)入多個文件,默認(rèn)會遞歸到子目錄中,例如:
- name: include vars from files
include_vars:
dir: vars/all
ansible-playbook命令的-e選項或者--extra-vars選項也可以用來定義變量或引入變量文件
栗子:
#定義單個變量
ansible-playbook -e 'var1="value1"' xxx.yml
#定義多個變量
ansible-playbook -e 'var1="value1" var2="value2"' xxx.yml
#引入單個變量文件
ansible-playbook -e '@varfile1.yml' xxx.yml
#引入多個變量文件
ansible-playbook -e '@varfile1.yml' -e '@varfile2.yml' xxx.yml
因為是通過選項的方式來定義變量的,所以它所定義的變量是全局的,對所有play都有效。
通常來說,不建議使用-e選項,因為這樣既不透明,也不友好,要求我們記住要定義哪些變量。
名稱欄目:ansible——組織變量
本文URL:http://muchs.cn/article12/jpeidc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、外貿(mào)建站、品牌網(wǎng)站制作、網(wǎng)站設(shè)計公司、服務(wù)器托管、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)