杭州门户网站建设,池州哪家做网站,比较开放的浏览器网址,专业的购物网站建设目录
一.循环迭代#xff08;loop/with_items#xff09;
1.作用
2.案例演示
#xff08;1#xff09;遍历输出以列表形式定义的abc
#xff08;2#xff09;遍历输出以变量定义的webservers组内主机
#xff08;3#xff09;遍历输出以字典定义的数据
#xf…目录
一.循环迭代loop/with_items
1.作用
2.案例演示
1遍历输出以列表形式定义的abc
2遍历输出以变量定义的webservers组内主机
3遍历输出以字典定义的数据
4遍历嵌套定义的loop
二.条件判断when
1.作用
2.when语句的比较运算符
1!/用于比较两个对象是否不等/相等可用于字符串、数字类型
2//用于比较两个对象的大小
3.when语句的逻辑运算符
1and逻辑与两个对象同真为真
2or逻辑或两个对象见真为真
3not逻辑否取反
4()作为一个更大的表达式包含一组表达式
4.when语句的exists判断
1判断目录是否存在
2判断文件是否不存在取反操作
5.when语句对于变量的判断
1defined变量已被定义
2变量未被定义
3变量被定义为空
6.when语句对于结果的判断
1success/succeededfailure/failed判断任务任性成功与否
2change/changedskip/skipped判断任务执行状态
三.整体条件判断block
1.作用
2.block用法示例
3.block错误处理时用法演示
4.block固定执行用法演示 一.循环迭代loop/with_items
1.作用
主要是用于让管理节点在需要编写多个任务时的情况下仅用一个任务来进行循环迭代完成任务使用loop关键字对目标进行迭代在ansible相对比较旧的版本中使用的with_item平替现在我的2.9.27仍然兼容loop关键字内可以是列表、变量、字典等
2.案例演示
1遍历输出以列表形式定义的abc
[rootmain playkongzhi]# cat loop1.yaml
---
- hosts: serveratasks:- name: test itemdebug: msg: {{ item }}loop:- a- b- c[rootmain playkongzhi]# ansible-playbook loop1.yaml
ok: [servera] (itema) {msg: a
}
ok: [servera] (itemb) {msg: b
}
ok: [servera] (itemc) {msg: c
}
2遍历输出以变量定义的webservers组内主机
[rootmain playkongzhi]# cat loop1.yaml
---
- hosts: serveratasks:- name: test itemdebug: msg: {{ item }}loop: {{ groups.webservers }}[rootmain playkongzhi]# ansible-playbook loop1.yaml
ok: [servera] (itemservera) {msg: servera
}
ok: [servera] (itemserverb) {msg: serverb
}
3遍历输出以字典定义的数据
循环输出hello和nihao
[rootmain playkongzhi]# cat loop1.yaml
---
- hosts: serveratasks:- name: test itemdebug: msg: {{ item }}loop:- x1: hello- x2: nihao
[rootmain playkongzhi]# ansible-playbook loop1.yaml
ok: [servera] (item{ux1: uhello}) {msg: {x1: hello}
}
ok: [servera] (item{ux2: unihao}) {msg: {x2: nihao}
}
4遍历嵌套定义的loop
循环创建user1和user2
[rootmain playkongzhi]# cat loopuser.yaml
---
- hosts: serveratasks:- name: create user1 and user2user:name: {{ item.name }}state: presentuid: {{ item.uid }}loop:- name: user1uid: 1011- name: user2uid: 1012
[rootmain playkongzhi]# ansible servera -a id user1
servera | CHANGED | rc0
uid1011(user1) gid1011(user1) groups1011(user1)
[rootmain playkongzhi]# ansible servera -a id user2
servera | CHANGED | rc0
uid1012(user2) gid1012(user2) groups1012(user2)
二.条件判断when
1.作用
1条件判断用于此任务的结果依赖变量、fact或者是上一个任务的结果用条件判断就可以决定如何去执行对应的任务。在节点上建立了限制捕获那些命令的输出结果不同执行的任务要求不同。
2可以判断某服务的配置文件是否发生变动时考虑是否重启。
3可以根据cpu状况来定制合适的调优策略
2.when语句的比较运算符
1!/用于比较两个对象是否不等/相等可用于字符串、数字类型
示例
[rootmain playkongzhi]# cat bijiao.yaml
---
- hosts: serveratasks:- name: com themdebug:msg: 等于when: name ownervars:name: sulibaoowner: sulibao
ok: [servera] {msg: 等于
}
2//用于比较两个对象的大小
示例
[rootmain playkongzhi]# cat bijiao.yaml
---
- hosts: serveratasks:- name: com themdebug:msg: hellowhen: name ownervars:name: sulowner: liok: [servera] {msg: hello
}
3.when语句的逻辑运算符
1and逻辑与两个对象同真为真
[rootmain playkongzhi]# cat when.yaml
---
- hosts: serveratasks:- name: dis infodebug:msg: yeswhen: 1 0 and 1 9ok: [servera] {msg: yes
}
2or逻辑或两个对象见真为真
[rootmain playkongzhi]# cat when.yaml
---
- hosts: serveratasks:- name: dis infodebug:msg: yeswhen: 1 0 or 1 9
ok: [servera] {msg: yes
}
3not逻辑否取反
[rootmain playkongzhi]# cat when.yaml
---
- hosts: serveratasks:- name: dis infodebug:msg: yeswhen: not 1 0 and 1 9
skipping: [servera]
4()作为一个更大的表达式包含一组表达式
[rootmain playkongzhi]# cat when.yaml
---
- hosts: serveratasks:- name: dis infodebug:msg: yeswhen: (not 1 0 and 1 9) or 5 6ok: [servera] {msg: yes
}
4.when语句的exists判断
1判断目录是否存在
[rootmain playkongzhi]# cat test.yaml
---
- hosts: serveratasks:- debug:msg: directory existwhen: path is existsvars:path: /rootok: [servera] {msg: directory exist
}
2判断文件是否不存在取反操作
[rootmain playkongzhi]# cat test.yaml
---
- hosts: serveratasks:- debug:msg: file not existwhen: not path is existsvars:path: /root/ansible.bakok: [servera] {msg: file not exist
}
5.when语句对于变量的判断
1defined变量已被定义
[rootmain playkongzhi]# cat varswhen.yaml
---
- hosts: serveratasks:- name: test varsdebug:msg: var definedwhen: inventory_hostname is defined
ok: [servera] {msg: var defined
}
2变量未被定义
[rootmain playkongzhi]# cat varswhen.yaml
---
- hosts: serveratasks:- name: test varsdebug:msg: var undefinedwhen: a is undefined
ok: [servera] {msg: var undefined
}
3变量被定义为空
[rootmain playkongzhi]# cat varswhen.yaml
---
- hosts: serveravars:a:tasks:- name: test varsdebug:msg: var nonewhen: a is noneok: [servera] {msg: var none
}
6.when语句对于结果的判断
1success/succeededfailure/failed判断任务任性成功与否
[rootmain playkongzhi]# cat result.yaml
---
- hosts: serveratasks:- name: cd resultshell: cd /cevdignore_errors: true #为了测试结果完整忽略错误register: result- name: test resultdebug:msg: no directory /cevdwhen: not result is success
ok: [servera] {msg: no directory /cevd
}
2change/changedskip/skipped判断任务执行状态
[rootmain playkongzhi]# cat result.yaml
---
- hosts: serveratasks:- name: cd resultshell: touch /a.txtignore_errors: trueregister: result- name: test resultdebug:msg: touch successwhen: result is changed
ok: [servera] {msg: touch success
}
三.整体条件判断block
1.作用
解决when语句多个判断需要书写多个when的情况使用block将多个任务组合起来对这个整体进行when条件判断条件成立了才会去执行块中的所有任务。在playbook中可以给block定义name也可以直接使用when但不能直接对其使用loop循环。这里主要介绍block常规用法rescue错误处理用法和always固定执行用法
2.block用法示例
[rootmain playkongzhi]# cat block.yaml
---
- hosts: serveratasks:- name: carry blockblock:- name: free shell: free -m- name: echo shell: free -m /a.txtwhen: 1 2
[rootmain playkongzhi]# ansible servera -a cat /a.txt
servera | CHANGED | rc0 total used free shared buff/cache available
Mem: 5848 306 5348 11 193 5313
Swap: 2047 0 2047
3.block错误处理时用法演示
没有/my目录shell模块执行错误执行rescue部分
注意block模块中只要有一个任务执行失败都会跳转执行rescue部分
[rootmain playkongzhi]# cat rescue.yaml
---
- hosts: serveratasks:- name: test rescueblock:- shell: ls /myrescue:- debug: msg: no directory
ok: [servera] {msg: no directory
}
4.block固定执行用法演示
不管bloack块执行成功还是失败都执行alway部分
[rootmain playkongzhi]# cat always.yaml
---
- hosts: serveratasks:- name: test rescueblock:- shell: ls /myrescue:- debug: msg: no directoryalways:- debug:msg: there always
ok: [servera] {msg: no directory
}
ok: [servera] {msg: there always
}