Ansible 筆記: Loop Items + Conditionls

目的:

讓 ansible 利用變數列表的方式,檢查資料夾內是否在存在實際的 rpm 檔存在,若有存在就不需要利用 yum 來進行安裝。其重點在於register會用dict的方式儲存下檢查的檔案的結果。

可以看到 current_rpm 這個變數是以 dict 的型態儲存所有的資訊,所以在最yum的tasks(最下方)中, 要 loop 的 item 就會是 current_rpm 這個變數儲存的資訊 with_items: current_rpm.results ,而 item.item.name 的第一個 item 代表 current_rpm.results 的整個 list,第二個 item就代表 list 中第一個 dict 的 “item” 這個 key。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var:   
list_of_rpms:
- { name: "poppler-devel", file: "poppler-devel-0.12.4-3.el6_0.1.x86_64.rpm"}
- { name: "poppler-glib-devel", file: "poppler-glib-devel-0.12.4-3.el6_0.1.x86_64.rpm"}

Tasks:

- name: check for rpm file exists
stat: path={ { build_path } }/etqpf_rpm/{ { item.file } }
register: current_rpm
with_items: list_of_rpms

- debug: var=current_rpm #可以印出這個變數的內容

- name: rpm does not in directory , running yum
yum: name="{ { item.item.name } }" state=latest
when: "{ { item.stat.exists } } == False"
with_items: current_rpm.results

[reference]

Jenkins.io
Vagrant