Ansible_playbook_使用循環(huán)


# Topic: Ansible playbook中的循環(huán)
# State:
# 1. 通過使用循環(huán)可以讓重復(fù)的工作自動來完成
# 2. Ansible playbook 支持超過20中循環(huán)
# Testing environment:
# OS: RHEL6.6
# Python: python2.7.5
# Ansible: ansible 2.3.1.0
# Nodes: 3
#

    1. 標(biāo)準(zhǔn)循環(huán):
      1.1 介紹:
      Standard loop 是使用最多的循環(huán)方式棱貌,可以直接減少編寫task的數(shù)據(jù)咬展,使得重復(fù)的task使用一個task即可完成
      例如要安裝10個軟件,如果不使用循環(huán)岸梨,就需要編寫10個task, 如果使用循環(huán)編寫一個就夠了元暴。
      1.2 用法:
      • 關(guān)鍵字: with_items
      • 說明:
        with_items 數(shù)據(jù)結(jié)構(gòu)對應(yīng)的是python或是yaml中的列表篷扩,每個列表項也可以是字典,每次循環(huán)到的當(dāng)前列表項
        使用item來引用.
        1.3 示例1:

# standard loop

  • name: stanard loop
    remote_user: root
    hosts: tomcat
    tasks:

    • name: loop list
      debug: msg={{ item }}
      with_items:
      • I
      • am
      • Michael
      • Lin
    • name: loop list of python' dic
      debug: msg="{{ item.key }} is {{ item.value }}"
      with_items:
      • { key: 'name', value: 'Michael' }
      • { key: 'gender', value: 'male' }
      • { key: 'age', value: '30' }
    • name: loop list of YAML's map
      debug: msg="{{ item['key'] }} is {{ item['value'] }}"
      with_items:
      • key: name
        value: Michael
      • key: gender
        value: female
      • key: age
        value: 30
        ...
    1. 嵌套循環(huán):
      2.1 介紹:
      嵌套循環(huán)可以將多個列表或是字典項進(jìn)行排序組合后形成多個列表茉盏,每一個列表都是一個item, 該item可以是對當(dāng)前組合的引用
      嵌套循環(huán)可以將多個集合進(jìn)行合并.
      2.2 用法:
      • 關(guān)鍵字:
        with_nested
      • 說明:
        with_nested的數(shù)據(jù)結(jié)構(gòu)是一個python或是YAML列表鉴未,這些列表可以經(jīng)過排序組合后形成多個列表枢冤,每個循環(huán)到的列表都被
        引用.
        2.3 示例1:

# nested loop

  • name: nested loop
    hosts: tomcat
    remote_user: root
    gather_facts: false
    tasks:
    • name: "nest loop three list"
      debug: msg="{{ item[0] }}''{{ item[1] }}'' {{ item[2]}}"
      with_nested:
      • ['A', 'B', 'C']
      • ['1', '2', '3']
      • ['*', '$', '@']
    • name: " nest loop tow map"
      debug: msg="{{ item[0] }}{{item[1]}}{{item[2]}}"
      with_nested:
      • {'a', 'b', 'c'}
      • {'1', '2', '3'}
      • {'#', '%', '!'}
        ...
    1. 散列循環(huán):
      3.1 介紹:
      散列循環(huán)示相對于標(biāo)準(zhǔn)循環(huán)只能使用列表而言的,也就是說刪了循環(huán)完成支持哈希散列铜秆。
      3.2 用法:
      • 關(guān)鍵字:
        with_dict
      • 說明:
        with_dict引用的數(shù)據(jù)結(jié)構(gòu)是一個散列掏导,而不是序列。
        3.3 示例:

# dict loop example

  • name: loop dict
    hosts: tomcat
    gather_facts: no
    vars:
    user:
    michael:
    age: 30
    sex: male
    tom:
    age: 32
    sex: female
    task:
    • name: dict loop
      debug: msg="{{ item.key }} ' ' {{ item.value.age }} ' ' {{item.value.sex}}"
      with_dict: user
    1. 文件匹配循環(huán):
      4.1 介紹:
      文件循環(huán)用于對匹配的文件進(jìn)行循環(huán)操作羽峰。
      4.2 用法:
      • 關(guān)鍵字:
        with_fileglob
      • 說明:
        with_fileglob 引用的數(shù)據(jù)結(jié)構(gòu)可以是列表(列表為測試), item指向當(dāng)前匹配到的文件
        4.3 示例:

# file loop example

  • name: loop file
    hosts: tomcat
    remote_user: root
    gather_facts: no
    tasks:

    • name: loop files of the current path
      debug: msg={{ item }}
      with_fileglob:
      • ./*.yaml
      • ./*.yml
    1. 隨機(jī)循環(huán):
      5.1 介紹:
      隨機(jī)循環(huán)就是從一個集合中隨機(jī)選擇一個項來執(zhí)行操作,記住是選擇一個!
      5.2 用法:
      • 關(guān)鍵字:
        with_random_choice
      • 說明:
        item引用的數(shù)據(jù)結(jié)構(gòu)可以是一個列表(哈希散列沒有測試)
        5.3 示例:

# random loop example

  • name: random loop the list
    hosts: ansible1
    remote_user: root
    gather_facts: no
    tasks:

    • name: random loop
      debug: msg={{ item }}
      with_random_choice:
      ['A', 'B', 'C' ]
    1. 條件判斷循環(huán):
      6.1 介紹:
      條件判斷用來檢測task的執(zhí)行結(jié)果是否符合條件添瓷,如果符合就不再執(zhí)行梅屉,否則繼續(xù)執(zhí)行
      6.2 用法:
      • 關(guān)鍵字:
        until
      • 說明:
        until關(guān)鍵字后面跟的是循環(huán)停止的條件
        6.3 示例:

# loop until example

  • name: loop until
    hosts: tomcat
    remote_user: root
    gather_facts: no
    tasks:

    • name: loop the file state
      shell: cat /etc/ansible/hosts
      register: info
      until: info.stdout.startswith('ansi')
      retries: 5
      delay: 5
    1. 文件優(yōu)先循環(huán):
      7.1 介紹:
      將第一匹配的文件傳入item
      7.2 用法:
      • 關(guān)鍵字:
        with_first_found
      • 說明:
        7.3 示例:

  • hosts: tomcat
    remote_user: root
    tasks:

    • name: INTERFACES | Create Ansible header for /etc/network/interfaces
      template:
      src: "{{ item }}"
      dest: "/etc/foo.conf"
      with_first_found:
      • "{{ ansible_virtualization_type }}_foo.conf"
      • "default_foo.conf"
    1. register循環(huán):
      8.1 介紹:
      該循循環(huán)是在register中存儲多個task執(zhí)行結(jié)果,然后遍歷register中的值
      8.2 用法:
      • 關(guān)鍵字:
      • 說明:
        當(dāng)循環(huán)完成后使用register來存儲結(jié)果, 然后使用jinja2的語法來遍歷結(jié)果
        8.3 示例:

# register loop example

  • name: register loop
    hosts: tomcat
    remote_user: root
    tasks:
    • name: print all the register
      shell: "{{ item }}"
      with_items:
      • uname
      • whoami
        register: its
    • name: print its
      debug: msg="{% for i in its.results %} {{ i.stdout }} {% endfor %}"

...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鳞贷,一起剝皮案震驚了整個濱河市坯汤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搀愧,老刑警劉巖惰聂,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咱筛,居然都是意外死亡搓幌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門迅箩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溉愁,“玉大人,你說我怎么就攤上這事饲趋」战遥” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵奕塑,是天一觀的道長堂污。 經(jīng)常有香客問我,道長龄砰,這世上最難降的妖魔是什么盟猖? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮换棚,結(jié)果婚禮上扒披,老公的妹妹穿的比我還像新娘。我一直安慰自己圃泡,他們只是感情好碟案,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颇蜡,像睡著了一般价说。 火紅的嫁衣襯著肌膚如雪辆亏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天鳖目,我揣著相機(jī)與錄音扮叨,去河邊找鬼。 笑死领迈,一個胖子當(dāng)著我的面吹牛彻磁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狸捅,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼衷蜓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了尘喝?” 一聲冷哼從身側(cè)響起磁浇,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朽褪,沒想到半個月后置吓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缔赠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年衍锚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗤堰。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡构拳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出梁棠,到底是詐尸還是另有隱情置森,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布符糊,位于F島的核電站凫海,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏男娄。R本人自食惡果不足惜行贪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望模闲。 院中可真熱鬧建瘫,春花似錦、人聲如沸尸折。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽实夹。三九已至橄浓,卻和暖如春粒梦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荸实。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工匀们, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人准给。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓泄朴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親露氮。 傳聞我的和親對象是個殘疾皇子祖灰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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

  • ###### Ansible總結(jié) ##### 運(yùn)維工作: 系統(tǒng)安裝(物理機(jī)、虛擬機(jī))-->程序包安裝沦辙、配置、服務(wù)啟...
    二郎5閱讀 2,029評論 0 4
  • 作為背鍋俠運(yùn)維工作的基本流程 運(yùn)維工具的分類 : ansible的模塊化: ansible密鑰登陸 ansible...
    二郎5閱讀 4,156評論 0 10
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理讹剔,服務(wù)發(fā)現(xiàn)油讯,斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 一.ansible (1) ansible: ansible是一款新出現(xiàn)的自動化運(yùn)維系統(tǒng)延欠,基于python開發(fā)并集...
    楠人幫閱讀 1,941評論 0 8
  • clojure 新手指南-目錄 - climbdream的個人空間 - 開源中國社區(qū)https://my.osch...
    葡萄喃喃囈語閱讀 2,258評論 0 3