ansible怎么跳过已经执行过的语句
时间: 2023-05-29 09:05:08 浏览: 253
在ansible中,如果一个任务已经被执行过了,那么它将被跳过。这是ansible的默认行为,不需要做任何特殊的设置或配置。
如果你想手动跳过一个任务或一组任务,你可以使用`when`关键字来实现。`when`关键字允许你在任务被执行之前检查一个条件,如果条件不满足,则跳过该任务。
下面是一个示例:
```
- name: deploy web app
hosts: webservers
tasks:
- name: stop web server
service: name=httpd state=stopped
when: web_server_state == 'started'
- name: start web server
service: name=httpd state=started
when: web_server_state == 'stopped'
```
在这个例子中,如果变量`web_server_state`的值为`started`,则第一个任务将被执行。如果它的值为`stopped`,则第二个任务将被执行。如果`web_server_state`的值为其他任何值,则两个任务都将被跳过。
相关问题
ansible 的when
Ansible的when语句用于在执行任务之前进行条件判断,根据条件的真假来决定是否执行该任务。当条件为真时,任务会被执行;当条件为假时,任务会被跳过。
以下是两个使用when语句的Ansible任务的例子:
1. 使用自定义参数进行条件判断:
```yaml
- hosts: all
tasks:
- name: "Install package on specific host"
yum:
name: httpd
state: installed
when: ansible_hostname == 'specific_host'
```
2. 根据主机名进行条件判断:
```yaml
- hosts: tomcat
vars:
tomca: 1
tasks:
- name: "Install httpd on nod1"
yum:
name: httpd
state: installed
when: ansible_hostname == 'nod1'
- name: "Install mysql on nod2"
yum:
name: mariadb,mariadb-server
state: installed
when: ansible_hostname == 'nod2'
```
这两个例子展示了如何使用when语句根据不同的条件来执行不同的任务。
ansible-playbook条件判断
在Ansible中,你可以使用条件判断语句来控制playbook的执行流程。条件判断语句通常用于根据不同的条件执行不同的任务或跳过某些任务。
以下是一些常见的条件判断语句:
- `when`语句:根据给定的条件决定是否执行任务。例如,只有在特定主机上时才执行任务:`when: inventory_hostname == 'myhost'`
- `failed_when`语句:根据给定的条件决定任务是否应标记为失败。例如,只有当特定命令返回非零退出代码时才将任务标记为失败:`failed_when: result.rc != 0`
- `changed_when`语句:根据给定的条件决定任务是否应标记为已更改。例如,只有当特定命令返回特定输出时才将任务标记为已更改:`changed_when: result.stdout == 'expected output'`
- `block`语句:可以将一组任务包装在一个块中,并使用条件判断控制块的执行。例如,只有当特定条件满足时才执行块中的任务:
```
block:
- name: Task 1
...
- name: Task 2
...
when: condition
```
这些是Ansible中常见的条件判断语句,你可以根据需要使用它们来控制playbook的执行流程。
阅读全文