目录
- 💕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
本文结束!