- 本文主要讲述了when、loop、handlers的含义及应用场景 - 并为每种语句配上示例 - 编写不易,感谢动动小手!!!!!!
💕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
本文结束!