ansible之條件判斷

1.判斷目錄或文件是否存在

- hosts: cf601
  remote_user: root
  gather_facts: no
  vars:
    testpath: /testdir
  tasks:
  - debug:
      msg: "file exist"
    when: testpath is exists  #不存在就用testpath is not exists

2.判斷變量

defined:判斷變量是否已經(jīng)定義,已經(jīng)定義則為真
undefined:判斷變量是否已經(jīng)定義总放,未定義則返回真
none:判斷變量是否已經(jīng)定義哺眯,如果變量值已經(jīng)定義谷浅,但是變量值為空,則返回真

- hosts: cf601
  remote_user: root
  gather_facts: no
  vars:
    testvar: "test"
    testvar1:
  tasks:
  - debug:
      msg: "Variable is defined"
    when: testvar is defined
  - debug:
      msg: "Variable is undefined"
    when: testvar2 is undefined
  - debug:
      msg: "The variable is defined, but there is no value"
    when: testvar1 is none

3.判斷執(zhí)行結(jié)果

success或succeeded: 通過(guò)任務(wù)的返回信息判斷任務(wù)的執(zhí)行狀態(tài)奶卓,任務(wù)執(zhí)行成功則返回真
failure或failed: 通過(guò)任務(wù)的返回信息判斷任務(wù)的執(zhí)行狀態(tài)一疯,任務(wù)執(zhí)行失敗則返回真
change或changed: 通過(guò)任務(wù)的返回信息判斷任務(wù)的執(zhí)行狀態(tài),任務(wù)執(zhí)行狀態(tài)為changed則返回真
skip或skipped: 通過(guò)任務(wù)的返回信息判斷任務(wù)的執(zhí)行狀態(tài)夺姑,當(dāng)任務(wù)沒(méi)有滿足條件墩邀,而被跳過(guò)執(zhí)行時(shí),則返回真

- hosts: cf601
  remote_user: root
  gather_facts: no
  vars:
    doshell: "yes"
  tasks:
  - shell: "cat /testdir/abc"
    when: doshell == "yes"
    register: returnmsg
    ignore_errors: true
  - debug:
      msg: "success"
    when: returnmsg is success
  - debug:
      msg: "failed"
    when: returnmsg is failure
  - debug:
      msg: "changed"
    when: returnmsg is change
  - debug:
      msg: "skip"
    when: returnmsg is skip

稍加改變看看三種情況的結(jié)果

4.判斷路徑

file: 判斷路徑是否是一個(gè)文件盏浙,如果路徑是一個(gè)文件則為真(該參數(shù)在實(shí)際使用我碰到過(guò)問(wèn)題眉睹,暫時(shí)不考慮使用可以使用stat來(lái)代替例如:

- name: check if exists /usr/local/bin/python3
  stat: path={{ py3_dir }}
  register: dir_stat

- name: check py3 is installed and force exit
  fail: msg="python3 has been installed already!"
  when: dir_stat.stat.exists


directory: 判斷路徑是否是一個(gè)目錄,如果路徑是一個(gè)目錄則為真
link: 判斷路徑是否是一個(gè)軟連接废膘,如果路徑是一個(gè)軟連接則為真
mount: 判斷路徑是否是一個(gè)掛載點(diǎn)竹海,如果路徑是一個(gè)掛載點(diǎn)則為真
exists: 判斷路徑是否存在,如果路徑存在則為真
注意:某些版本之前可能需要加上“is_”前綴

- hosts: cf601
  remote_user: root
  gather_facts: no
  vars:
    testpath1: "/testdir/test"
    testpath2: "/testdir/"
    testpath3: "/testdir/testsoftlink"
    testpath4: "/testdir/testhardlink"
    testpath5: "/boot"
  tasks:
  - debug:
      msg: "file"
    when: testpath1 is file
  - debug:
      msg: "directory"
    when: testpath2 is directory
  - debug:
      msg: "link"
    when: testpath3 is link
  - debug:
      msg: "link"
    when: testpath4 is link
  - debug:
      msg: "mount"
    when: testpath5 is mount
  - debug:
      msg: "exists"
    when: testpath1 is exists

5.判斷整除(比較少用)

even: 判斷數(shù)值是否是偶數(shù)丐黄,偶數(shù)則為真
odd: 判斷數(shù)值是否是奇數(shù)斋配,奇數(shù)則為真
divisibleby(num): 判斷是否可以整除指定的數(shù)值,如果除以指定的值以后余數(shù)為0孵稽,則返回真

- hosts: cf601
  remote_user: root
  gather_facts: no
  vars:
    num1: 4
    num2: 7
    num3: 64
  tasks:
  - debug:
      msg: "An even number"
    when: num1 is even
  - debug:
      msg: "An odd number"
    when: num2 is odd
  - debug:
      msg: "Can be divided exactly by"
    when: num3 is divisibleby(8)

5.其他

version: 可以用于對(duì)比兩個(gè)版本號(hào)的大小许起,或者與指定的版本號(hào)進(jìn)行對(duì)比,語(yǔ)法version('版本號(hào)'菩鲜,'比較操作符')
2.5版本此test從version_compare 更名為version

- hosts: test70
  remote_user: root
  vars:
    ver: 7.4.1708
    ver1: 7.4.1707
  tasks:
  - debug:
      msg: "This message can be displayed when the ver is greater than ver1"
    when: ver is version(ver1,">")
  - debug:
      msg: "system version {{ansible_distribution_version}} greater than 7.3"
    when: ansible_distribution_version is version("7.3","gt")

這里的例子里面兩種比較都是可以的 支持多種風(fēng)格操作符园细。

subset: 判斷一個(gè)list是不是另一個(gè)list的子集,是則為真
siperset: 判斷一個(gè)list是不是另一個(gè)list的父集接校,是則為真
注:2.5版本之前是issubset和issuperset

- hosts: cf601
  remote_user: root
  gather_facts: no
  vars:
    a:
    - 2
    - 5
    b: [1,2,3,4,5]
  tasks:
  - debug:
      msg: "A is a subset of B"
    when: a is subset(b)
  - debug:
      msg: "B is the parent set of A"
    when: b is superset(a)

string: 判斷對(duì)象是否是一個(gè)字符串猛频,是則為真
number: 判斷對(duì)象是否是一個(gè)數(shù)字狮崩,是則為真

- hosts: cf601
  remote_user: root
  gather_facts: no
  vars:
    testvar1: 1
    testvar2: "1"
    testvar3: a
  tasks:
  - debug:
      msg: "This variable is a string"
    when: testvar1 is string
  - debug:
      msg: "This variable is a string"
    when: testvar2 is string
  - debug:
      msg: "This variable is a string"
    when: testvar3 is string
- debug:
      msg: "This variable is number"
    when: testvar1 is number
  - debug:
      msg: "This variable is a number"
    when: testvar2 is number
  - debug:
      msg: "This variable is a number"
    when: testvar3 is number

轉(zhuǎn)載自:http://www.zsythink.net/archives/2817

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鹿寻,隨后出現(xiàn)的幾起案子睦柴,更是在濱河造成了極大的恐慌,老刑警劉巖毡熏,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坦敌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡痢法,警方通過(guò)查閱死者的電腦和手機(jī)狱窘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)财搁,“玉大人蘸炸,你說(shuō)我怎么就攤上這事〖獗迹” “怎么了搭儒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)提茁。 經(jīng)常有香客問(wèn)我淹禾,道長(zhǎng),這世上最難降的妖魔是什么甘凭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任稀拐,我火速辦了婚禮,結(jié)果婚禮上丹弱,老公的妹妹穿的比我還像新娘。我一直安慰自己铲咨,他們只是感情好躲胳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著纤勒,像睡著了一般坯苹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摇天,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天粹湃,我揣著相機(jī)與錄音,去河邊找鬼泉坐。 笑死为鳄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腕让。 我是一名探鬼主播孤钦,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了偏形?” 一聲冷哼從身側(cè)響起静袖,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俊扭,沒(méi)想到半個(gè)月后队橙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萨惑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年捐康,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咒钟。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吹由,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出朱嘴,到底是詐尸還是另有隱情倾鲫,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布萍嬉,位于F島的核電站乌昔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏壤追。R本人自食惡果不足惜磕道,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望行冰。 院中可真熱鬧溺蕉,春花似錦、人聲如沸悼做。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肛走。三九已至漓雅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間朽色,已是汗流浹背邻吞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葫男,地道東北人抱冷。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像腾誉,于是被迫代替她去往敵國(guó)和親徘层。 傳聞我的和親對(duì)象是個(gè)殘疾皇子峻呕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,380評(píng)論 0 5
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,744評(píng)論 0 10
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程趣效,因...
    小菜c閱讀 6,397評(píng)論 0 17
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,096評(píng)論 1 32
  • 此三小只非彼三小只瘦癌,所以,大家不要誤會(huì)跷敬。 我說(shuō)的三小只我家的讯私,大黑,小白和小不點(diǎn)西傀。 昨天立秋就開(kāi)始電閃雷鳴斤寇,狂風(fēng)暴...
    是的比心閱讀 272評(píng)論 0 1