Ansible 条件判断

Ansible 条件判断

一、使用 when 进行条件判断

  • 功能when 关键字用于在 Ansible 任务中进行条件判断,决定任务是否执行。when 语句后面跟随一个条件表达式,只有当条件为真时,任务才会被执行。
  • 用法when 后面可以是一个简单的布尔值、变量、或者更复杂的表达式。条件表达式可以根据变量的值、主机的事实(facts)、命令的结果等来定义。

示例

tasks:
  - name: Install Nginx on RedHat systems
    yum:
      name: nginx
      state: present
    when: ansible_facts['os_family'] == 'RedHat'
  • 解释:该任务使用 when 条件判断语句,只有在操作系统家族(os_family)为 RedHat 时,才会执行安装 Nginx 的任务。

二、多条件判断(and、or、not)

  • 功能:Ansible 支持使用 andornot 等逻辑操作符进行多条件判断,使条件判断更加灵活和复杂。
  • 用法:使用 and 连接多个条件,表示所有条件都必须为真;使用 or 连接多个条件,表示只需任意一个条件为真;使用 not 表示条件为假时执行任务。

示例

2.1 使用 andor

tasks:
  - name: Install Apache on Ubuntu systems with 4GB RAM or more
    apt:
      name: apache2
      state: present
    when: ansible_facts['ansible_distribution'] == 'Ubuntu' and ansible_facts['ansible_memtotal_mb'] >= 4096
  • 解释:该任务只有在操作系统为 Ubuntu 且内存大于等于 4GB 时,才会执行安装 Apache 的操作。
tasks:
  - name: Install software on RedHat or Ubuntu systems
    package:
      name: httpd
      state: present
    when: ansible_facts['os_family'] == 'RedHat' or ansible_facts['ansible_distribution'] == 'Ubuntu'
  • 解释:该任务只有在操作系统家族为 RedHat 或者发行版为 Ubuntu 时,才会执行安装 httpd 软件包的操作。

2.2 使用 not

tasks:
  - name: Ensure Nginx is not installed on non-RedHat systems
    yum:
      name: nginx
      state: absent
    when: not ansible_facts['os_family'] == 'RedHat'
  • 解释:该任务只有在操作系统家族不是 RedHat 时,才会执行卸载 Nginx 的操作。

三、基于变量、事实和命令结果的条件

  • 基于变量的条件:条件可以直接使用变量的值,变量的值通常是在 Playbook 中定义的,也可以是通过 set_fact 动态设置的。

示例

tasks:
  - name: Install Nginx if needed
    yum:
      name: nginx
      state: present
    when: nginx_needed
  • 解释:该任务会检查变量 nginx_needed 的值,如果为 true,则执行安装 Nginx。

  • 基于事实(facts)的条件:Ansible 在执行 Playbook 时会收集目标主机的事实信息(如操作系统类型、内存大小等),可以使用这些事实信息进行条件判断。

示例

tasks:
  - name: Ensure high availability setup on Debian systems
    service:
      name: corosync
      state: started
    when: ansible_facts['ansible_distribution'] == 'Debian'
  • 解释:该任务只有在操作系统为 Debian 时,才会启动 corosync 服务。

  • 基于命令结果的条件:可以使用 register 保存命令执行的结果,并基于结果进行条件判断。

示例

tasks:
  - name: Check if Apache is running
    shell: systemctl status apache2
    register: apache_status
    ignore_errors: yes

  - name: Restart Apache if it's not running
    service:
      name: apache2
      state: restarted
    when: apache_status.rc != 0
  • 解释
    • 第一个任务执行 systemctl status apache2 命令,检查 Apache 服务的状态,并将结果保存到变量 apache_status 中。
    • 第二个任务使用 when 语句,只有当 apache_status 的返回码(rc)不为 0 时,才会执行重启 Apache 服务的操作。

通过使用 when 关键字和逻辑操作符,Ansible 可以根据不同的条件来执行任务,使 Playbook 更加灵活和智能化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟生啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值