目录
一.循环迭代
1.简单循环
{{item}}迭代变量名词 loop: 赋值列表
- name:
hosts: westos
tasks:
- name: echo
debug:
msg: "{{item}}"
loop:
- luck
- bad
2.循环散列或者字典列表
- name:
hosts: westos
tasks:
- name:
service:
name: "{{item.name}}"
state: "{{item.state}}"
loop:
- name: httpd
state: restarted
- name: firewalld
state: stopped
二.条件
when
- 条件1
- 条件2
- name:
hosts: all
tasks:
- name: check file
shell: test -e /mnt/test
register: CHECKOUT
ignore_errors: yes
- name: debug
debug:
msg: "/mnt/test is not exit"
when:
- inventory_hostname in groups.westos
- CHECKOUT.rc !=0
- name: debug
debug:
msg: "/mnt/test is exit"
when:
- inventory_hostname in groups.westos
- CHECKOUT.rc == 0
= | value==“字符串” value = = 数字 |
> | value < 数字 |
< | --- |
<= | --- |
>= | --- |
!= | --- |
is not defined | ---- |
is defined | value is defined |
in | value is in value |
not in | value is not in value |
true /bool变量 | value / value值为true |
flase /bool变量 | not value / value值为flase |
value in value2 value值在value2 |
when:>
1
2
- name:
hosts: all
tasks:
- name: check file
shell: test -e /mnt/test
register: CHECKOUT
ignore_errors: yes
- name: debug
debug:
msg: "/mnt/test is not exit"
when: >
inventory_hostname in groups.westos
or
CHECKOUT.rc !=0
练习
建立lvm.yml
建立大小为1500M的名为exam_lvm的lvm在westos组中
如果westos不存在请输出
vg westos is not exit
如果 westos大小不足1500M 请输出
vg westos is less than 1500M
并建立800M的lvm
输出这一步并没有准确做到 应该在学了block,rescue,和always去做
- name: create exam_lvm
hosts: westos
tasks:
- name: check /dev/vdb
debug:
msg: vg westos is not exit
when: ansible_facts['lvm']['vgs']['westos'] is not defined
- name: create 1500M lvm
lvol:
vg: westos
lv: exam_lvm
size: 1500m
when: ansible_facts['lvm']['vgs']['westos'] is defined
ignore_errors: yes
register: lvmstart
- name: create 800M lvm
lvol:
vg: westos
lv: exam_lvm
size: 800m
ignore_errors: yes
register: lvmstop
when:
- ansible_facts['lvm']['vgs']['westos'] is defined
- lvmstart['rc'] !=0
- name:
debug:
msg: "vg westos less than 1500M"
三.触发器
notify:触发器遇到更改触发handlers
handlers: 触发器触发后执行的动作
- name:
hosts: westos
tasks:
- name: install apache
dnf:
name: httpd
state: present
- name: configure httpd
lineinfile:
regexp: "^Listen"
path: /etc/httpd/conf/httpd.conf
line: "Listen 8080"
notify:
restart httpd
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
enabled: yes
要触发重启服务,需要触发器前面的模块动作
四.处理失败任务
ignore_errors
force_handlers: yes/no yes时当任务失败后play中止仍会调用触发器
将被控机httpd 卸载,删除/etc/httpd,失败的任务,不影响触发重启
changed_when: 控制任务在何时报告它已经更改 true 已经更改和触发器一起用一直触发
failed_when: true无论任务是否成功,都会显示失败 可加条件
五.block
block:
rescue:
always:
测试
建立playbook ~/westos.yml
建立大小为1500M的/dev/vdb1设备
如果/dev/vdb1不存在请输入 /dev/vdb1 is not exit
如果大小不足2G请输入 /dev/vdb1 is less then 2G
并建立800M大小的/dev/vdb1
次设挂载在/westos上