目录

  • 💕when:条件语句
  • 示例:通过fact变量判断系统为centos时安装nginx
  • 示例:为特定的主机添加Nginx仓库
  • 💕loop:循环语句
  • 示例:依次启动多个服务
  • 示例:拷贝文件到不同目录
  • 💕handlers:触发器
  • 示例:一个安装nginx的案例


💕when:条件语句

Ansible的when条件控制语句允许您基于条件执行任务或跳过任务。

这个功能在处理不同的系统和环境时非常有用,因为您可以使用适当的条件来检查变量、主机名和其他条件。

when 是一种条件语句,用于在任务执行之前检查某些条件是否为真。当条件为真时,任务将被执行;当条件为假时,任务将被跳过。

when 语句可用于各种场景,例如:

  • 操作系统特定的任务:当任务仅适用于特定的操作系统时,可以使用 when 语句根据操作系统类型来跳过任务。
  • 主机属性:当主机的某些属性符合条件时,可以使用 when 语句来执行任务,例如主机的 IP 地址、主机名等。
  • 变量值:当变量符合条件时,可以使用 when 语句来执行任务。
  • 环境:当处于特定环境时,可以使用 when 语句来执行任务。例如,在测试环境中运行的任务可能与在生产环境中运行的任务不同。
  • 其他条件:当任务只有在满足一定条件时才需要执行时,可以使用 when 语句来控制任务的执行。

示例:通过fact变量判断系统为centos时安装nginx

- hosts: all
  tasks:
    - name: Installed nginx
      yum: 
        name: nginx
        state: present
      when: (ansible_distribution == "CentOS")

示例:为特定的主机添加Nginx仓库

- hosts: all
  tasks:
    - name: ADD nginx yum repository
      yum_repository:
        name: nginx
        description: Nginx Repository
        baseurl: http://nginx.org/packages/centos/$releasever/$basearch/
        gpgcheck: no
      when: (ansible_hostname is match("web*"))

💕loop:循环语句

Ansible的loop是用于在Playbook中重复执行任务的控制结构。它可以使操作更简洁,可读性更高,减少代码的重复编写。在Playbook中可以使用以下的循环结构:

  • with_items:对列表中的每个项执行任务。
  • with_indexed_items:对列表中的每个项及其索引执行任务。
  • with_dict:对字典中的每个键/值对执行任务。
  • with_file:对文件列表中的每个文件执行任务。

loop 是一种循环语句,用于在一组值上迭代执行任务。

loop 语句可用于各种场景,例如:

  • 配置多个主机:当需要在多个主机上执行相同的任务时,可以使用 loop 语句遍历主机列表,并在每个主机上执行相同的任务。
  • 配置多个用户:当需要在多个用户上执行相同的任务时,可以使用 loop 语句遍历用户列表,并在每个用户上执行相同的任务。
  • 安装多个软件包:当需要在多个主机上安装多个软件包时,可以使用 loop 语句遍历软件包列表,并在每个主机上安装相同的软件包等等… …

示例:依次启动多个服务

- hosts: all
  tasks:
    name: Started server
      systemd:
        name: "{{ item }}"
        state: started
      loop:
        - nginx
        - php-fpm

示例:拷贝文件到不同目录

- hosts: all
  tasks:
    name: Copy files
      copy:
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
      loop:
        - { src: "file1" , dest: "/dir1" }
        - { src: "file2" , dest: "/dir2" }

💕handlers:触发器

Ansible中的handlers是一组特殊的任务,它们在特定的条件下触发执行。

Handlers通常用于在任务执行之后,修正某些服务、应用程序或配置文件等方面的状态。

Handlers与任务类似,都是在playbook中定义的,但Handlers与任务的区别在于:Handlers只有当其被唤起的时候才会执行。

Handlers 是一种特殊的任务类型,它们通常用于在任务执行后执行特定的操作,比如重新启动服务或重新加载配置文件等。

示例:一个安装nginx的案例

注意:notify的名字要和handlers中的name名字完全一致。

- name: Install and configure Nginx
  hosts: web_servers
  tasks:
    - name: Install Nginx
      yum:
        name: nginx
        state: present

    - name: Configure Nginx
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: Restart Nginx

  handlers:
    - name: Restart Nginx
      service:
        name: nginx
        state: restarted

本文结束!