1. 獲取未分組的主機名
主機清單
10.1.1.60
test70.zsythink.net ansible_host=10.1.1.70
test71 anisble_host=10.1.1.71
[testA]
test60 ansible_host=10.1.1.60
test61 ansible_host=10.1.1.61
[testB]
test70 ansible_host=10.1.1.70
[test:children]
testA
testB
ansible test70 -m debug -a "msg={{groups.ungrouped}}"
ansible test70 -m debug -a "msg={{groups.ungrouped[1]}}"
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_items: "{{groups.ungrouped}}"
2. 循環格式
2.1 語法一
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_items:
- 1
- 2
- 3
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_items: [ 1, 2, 3 ]
2.2 語法二
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item.test1}}"
with_items:
- { test1: a, test2: b }
- { test1: c, test2: d }
2.3 語法三
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- file:
path: "/opt/a"
state: touch
- file:
path: "/opt/b"
state: touch
- file:
path: "/opt/c"
state: touch
- file:
path: "/opt/d"
state: touch
---
- hosts: test70
remote_user: root
gather_facts: no
vars:
dirs:
- "/opt/a"
- "/opt/b"
- "/opt/c"
- "/opt/d"
tasks:
- file:
path: "{{item}}"
state: touch
with_items: "{{dirs}}"
2.4 語法四
---
- hosts: test70
gather_facts: no
tasks:
- shell: "{{item}}"
with_items:
- "ls /opt"
- "ls /home"
register: returnvalue
- debug:
msg:
"{% for i in returnvalue.results %}
{{ i.stdout }}
{% endfor %}"
3. 循環和註冊變量連用
---
- hosts: test70
gather_facts: no
tasks:
- shell: "{{item}}"
with_items:
- "ls /opt"
- "ls /home"
register: returnvalue
- debug:
msg: "{{item.stdout}}"
with_items: "{{returnvalue.results}}"
---
- hosts: test70
gather_facts: no
tasks:
- shell: "{{item}}"
with_items:
- "ls /opt"
- "ls /home"
register: returnvalue
- debug:
var: returnvalue
3. 循環拉平
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_items:
- [ 1, 2, 3 ]
- [ a, b ]
4. with_list
不會拉平,整體輸出
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_list:
- [ 1, 2, 3 ]
- [ a, b ]
5. with_flattened
拉平
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_flattened:
- [ 1, 2, 3 ]
- [ a, b ]
5. with_together
生成對應列,map
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{ item }}"
with_together:
- [ 1, 2, 3 ]
- [ a, b, c ]
6. with_cartesian
笛卡爾乘積
mkdir -p {a,b,c}/{test1,test2}
ansible test70 -m shell -a "mkdir -p /testdir/testdir/{a,b,c}/{test1,test2}"
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{ item }}"
with_cartesian:
- [ a, b, c ]
- [ test1, test2 ]
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- file:
state: directory
path: "/testdir/testdir/{{ item.0 }}/{{ item.1 }}"
with_cartesian:
- [ a, b, c ]
- [ test1, test2 ]
7. with_indexed_items
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{ item }}"
with_indexed_items:
- test1
- test2
- test3
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "index is : {{ item.0 }} , value is {{ item.1 }}"
with_indexed_items:
- test1
- test2
- test3
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "index is : {{ item.0 }} , value is {{ item.1 }}"
with_indexed_items:
- [ test1, test2 ]
- [ test3, test4, test5 ]
- [ test6, test7 ]
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{ item }}"
with_indexed_items:
- [ test1, test2 ]
- [ test3, [ test4, test5 ] ]
- [ test6 ]
8. with_sequence
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{ item }}"
with_sequence: start=1 end=5 stride=1
with_sequence:
start=1
end=5
stride=1
從1開始,步長爲1,一直到5
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_sequence: count=5
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_sequence: start=6 end=2 stride=-2
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- file:
path: "/testdir/testdir/test{{ item }}"
state: directory
with_sequence:
start=2
end=10
stride=2
賦值是整數時,不能使用start: 2這種形式,-這種列表,已經空格了,但是再空格也不錯
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_sequence: start=2 end=6 stride=2 format="number is %0.2f"
9. with_random_choice
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_random_choice:
- 1
- 2
- 3
- 4
- 5
10. with_dict
---
- hosts: test70
remote_user: root
gather_facts: no
vars:
users:
alice: female
bob: male
tasks:
- debug:
msg: "{{item}}"
with_dict: "{{users}}"
---
- hosts: test70
remote_user: root
gather_facts: no
vars:
users:
alice: female
bob: male
tasks:
- debug:
msg: "User name: {{item.key}} , User's gender: {{item.value}} "
with_dict: "{{users}}"
---
- hosts: test70
remote_user: root
gather_facts: no
vars:
users:
alice:
name: Alice Appleworth
gender: female
telephone: 123-456-7890
bob:
name: Bob Bananarama
gender: male
telephone: 987-654-3210
tasks:
- debug:
msg: "{{item}}"
with_dict: "{{users}}"
---
- hosts: test70
remote_user: root
gather_facts: no
vars:
users:
alice:
name: Alice Appleworth
gender: female
telephone: 123-456-7890
bob:
name: Bob Bananarama
gender: male
telephone: 987-654-3210
tasks:
- debug:
msg: "User {{ item.key }} is {{ item.value.name }}, Gender: {{ item.value.gender }}, Tel: {{ item.value.telephone }}"
with_dict: "{{users}}"
11. with_subelements
---
- hosts: test70
remote_user: root
gather_facts: no
vars:
users:
- name: bob
gender: male
hobby:
- Skateboard
- VideoGame
- name: alice
gender: female
hobby:
- Music
tasks:
- debug:
msg: "{{ item }}"
with_subelements:
- "{{users}}"
- hobby
---
- hosts: test70
remote_user: root
gather_facts: no
vars:
users:
- name: bob
gender: male
hobby:
- Skateboard
- VideoGame
- name: alice
gender: female
hobby:
- Music
tasks:
- debug:
msg: "{{ item.0.name }} 's hobby is {{ item.1 }}"
with_subelements:
- "{{users}}"
- hobby
12. with_file
只對ansible本地主機文件操作
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{ item }}" //var: item //var: {{item}} //var: "{{item}}"
with_file:
- /testdir/testdir/a.log
- /opt/testfile
13. with_fileglob
只對ansible本地主機文件操作
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{ item }}"
with_fileglob:
- /testdir/*
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{ item }}"
with_fileglob:
- /testdir/*
- /opt/test*.???
14. with_items和user模塊配合使用
---
- hosts: webserver
user: admin
become: yes
tasks:
- name: add users
user: name={{ item.name }} state=present groups={{ item.groups }}
with_items:
- { name: 'testuser01', groups: 'wheel' }
- { name: 'testuser02', groups: 'root' }
15. 嵌套循環
- name: give users access to multiple databases
mysql_user: name={{ item[0] }} priv={{ item[1] }}.*:ALL append_privs=yes password=foo
with_nested:
- [ 'alice', 'bob' ]
- [ 'clientdb', 'employeedb', 'providerdb' ]
16. 遍歷字典
---
- hosts: webserver
user: admin
become: yes
tasks:
- name: print phone records
debug: msg="User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
with_dict: {'alice':{'name':'Alice Appleworth', 'telephone':'123-456-789'},'bob':{'name':'Bob Bananarama', 'telephone':'987-654-3210'} }
17. 遍歷文件
---
- hosts: all
tasks:
- debug: "msg={{ item }}"
with_file:
- first_example_file
- second_example_file
17. 遍歷目錄 (文件匹配循環)
---
- hosts: all
tasks:
- file: dest=/etc/fooapp state=directory
- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
with_fileglob:
- /playbooks/files/fooapp/*
18. 重試循環
- action: shell /usr/bin/foo
register: result
until: result.stdout.find("all systems go") != -1
retries: 5 重試此時
delay: 10 間隔時間
————Blueicex 2020/3/28 09:55 [email protected]