当前位置:网站首页>Ansible中的任务执行控制
Ansible中的任务执行控制
2022-08-01 23:57:00 【野124】
目录
2.建立userlist.yml中的用户,并且使用户密码加密,
一.循环
循环迭代任务
1.简单循环
- name: test play
hosts: westos
tasks:
- debug:
msg: "{ {item}}"
loop:
- westos
- linux
- lee
2.循环散列或字典列表
- name: test play
hosts: westos
tasks:
- debug:
msg: "{ {item.name}} { {item.age}}"
loop:
- { name: westos, age: 18 }
- { name: linux, age: 19 }
- { name: lee, age: 20 }
二.条件
when: - 条件1 - 条件
2 条件判断
= | value == "字符串",value == 数字 |
< | value < 数字 |
> | value > 数字 |
<= | value <= 数字 |
>= | value >= 数字 |
!= | value != 数字 |
is defined | value is defined变量存在 |
is not defined | value is not defined 变量不存在 |
in | value is in value 变量为 |
not in | value is not in value 变量不为 |
bool变量 为true | value的值为true |
bool变量 false | value的值为false |
多条条件组合
when:
条件1 and 条件2
- 条件1
- 条件2
when:
条件1 or 条件2
when: >
条件1
or
条件2
三.触发器
notify: 触发器当遇到更改是触发handlers
handlers:触发器触发后执行的动作
实例:安装Apache,更改端口为8080,如果更改,并重启Apache,触发触发器;如果端口号是8080未被修改,则不需要重启,触发器不被触发
- name: apache server
hosts: westos
vars:
port: 8080
tasks:
- name: install httpd
dnf:
name: httpd
state: present
- name: set config
lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: ^Listen
line: "Listen { {port}}"
notify: restart apache
- name: enable filewalld
firewalld:
port: "{ {port}}/tcp"
permanent: yes
immediate: yes
state: enabled
- name: state apache
service:
name: httpd
state: started
enabled: yes
handlers:
- name: restart apache
service:
name: httpd
state: restarted
四.处理失败任务
1.ignore_errors
作用:
当play遇到任务失败时会终止,ignore_errors: yes将会忽略任务失败使下面的任务继续运行
实例:执行install software play失败后会执行show some message play模块
- name: test play
hosts: westos
tasks:
- name: inatall software
dnf:
name: http(错误)
state: present
ignore_errors: yes
- name: show some message
debug:
msg: hello westos
2.force_handlers
作用:当任务失败后play被终止,也会调用触发器进程
- name: test play
hosts: westos
force_handlers: yes
tasks:
- name: test
shell: ls /mnt/
- name: install software
dnf:
name: http(错误)
state: present
- name: show some massages
debug:
msg: hello westos
handlers:
- name: notify messages
debug:
msg: hello notify
3.changed_when
作用: 控制任务在何时报告它已进行更改,无论有没有更改,都视为更改
- name: test play
hosts: westos
tasks:
- name: install software
dnf:
name: http(错误)
state: present
changed_when: yes
notify: notify message
- name: show some message
debug:
msg: hello westos
handlers:
- name: notify message
debug:
msg: hello notify
4.failed_when
当符合条件时强制任务失败 (无论是不是失败的,都强制失败)
- name: test play
hosts: westos
tasks:
- name: install software
dnf:
name: http(错误)
state: present
failed_when: yes
notify: notify message
- name: show some message
debug:
msg: hello westos
handlers:
- name: notify message
debug:
msg: hello notify
5.block
block: 定义要运行的任务
rescue: 定义当block句子中出现失败任务后运行的任务
always: 定义最终独立运行的任务
- name: test play
hosts: westos
force_handlers: yes
tasks:
- name: test block
block:
- name: install software
dnf:
name: http(错误)
state: present
rescue:
- name: show error
debug:
msg: http is not exist
always:
- name: show message
debug:
msg: over
测试练习
磁盘划分
1.建立playbook ~/westos.yml
要求如下: 建立大小为1500M名为/dev/vdb1的设备 如果/dev/vdb不存在请输入: /dev/vdb is not exist 如果/dev/vdb大小不足2G请输出: /dev/vdb is less then 2G 并建立800M大小的/dev/vdb1 此设备挂载到/westos上
- name: test
hosts: westos
tasks:
- name: /dev/sdb is not exist
debug:
msg: /dev/sdb is not exist
when:
ansible_facts['devices']['sdb'] is not defined
- name: create_storage
block:
- name: create 1500M
parted:
device: /dev/sdb
number: 1
state: present
part_end: 1500MiB
when:
ansible_facts['devices']['sdb'] is defined
rescue:
- name: create 800M
parted:
device: /dev/sdb
number: 1
state: present
part_end: 800MiB
when:
ansible_facts['devices']['sdb'] is defined
- name: device messages
debug:
msg: /dev/sdb is less 2G
when:
ansible_facts['devices']['sdb'] is defined
always:
- name: create filesystem
filesystem:
fstype: xfs
dev: /dev/sdb1
- name:
file:
path: /westos
state: directory
- name: mount devices
mount:
path: /westos
src: /dev/sdb1
fstype: xfs
state: mounted
when:
ansible_facts['devices']['sdb'] is defined
2.建立userlist.yml中的用户,并且使用户密码加密,
vim userlist.yml
vim useradd.yml
边栏推荐
- @Resource和@Autowired的区别
- ICLR 2022 Best Paper: Partial Label Learning Based on Contrastive Disambiguation
- 学习英语的网站与资料
- 【Leetcode】478. Generate Random Point in a Circle(配数学证明)
- Flink学习第三天——一文带你了解什么是Flink流?
- 【MySQL系列】MySQL数据库基础
- 【ACWing】230. 排列计数
- 程序员还差对象?new一个就行了
- With a monthly salary of 12K, the butterfly changed to a new one and moved forward bravely - she doubled her monthly salary through the career change test~
- How to get the best power efficiency in Windows 11?
猜你喜欢
随机推荐
字节跳动面试官:请你实现一个大文件上传和断点续传
security CSRF Vulnerability Protection
Unity—四元数、欧拉角API+坐标系统
几道关于golang并发的面试题
【ACWing】230. 排列计数
C语言七夕来袭!是时候展现专属于程序员的浪漫了!
20220725 Information update
Various Joins of Sql
机器学习文本分类
Get piggy homestay (short-term rental) data
Cash Ⅱ LeetCode_518_ change
【Leetcode】473. Matchsticks to Square
security 会话并发管理
background-image使用
Is TCP reliable?Why?
【Leetcode】475. Heaters
WEB安全基础 - - - XRAY使用
12306抢票,极限并发带来的思考?
【Leetcode】470. Implement Rand10() Using Rand7()
ICLR 2022最佳论文:基于对比消歧的偏标签学习