Ansible中的任务控制

一、循环

循环迭代任务
1.简单循环

loop:		##赋值列表
            - value1
            - value2
            - ...

{{item}}	##迭代变量名称

实例
在这里插入图片描述2.循环散列或字典列表

在这里插入图片描述
例题

受控主机上安装httpd .vsftpd. dhcp-server
并且建立两个用户
westosuser1 组id 444 家目录:/mnt/westosusr1
westosuser2 组id 6666 家目录: /mnt/westosuser2
两个用户的附加组是21

---
- name: test
  hosts: 172.25.12.1
  tasks:
    - name: dnf software
      dnf:
        name: "{{item.name}}"
        state: present
      loop:
         - name: dhcp-server
         - name: httpd
         - name: vsftpd
    - name: create group
      group:  
        name: "{{item.name}}"
        gid:  "{{item.gid}}"
        state: present
      loop: 
        - name: westosuser1
          gid:  4444
        - name: westosuser2
          gid:  6667
        - name: westosuser
          gid: 21
      ignore_errors: yes
    - name: create user
      user:
        name: "{{item.name}}"
        group: "{{item.group}}"
        groups: "{{item.groups}}"
        home:  "{{item.home}}"
      loop:
        - name: westosuser1
          group: 4444
          groups: 21
          home: /mnt/westosuser1
        - name: westosuser2
          group: 6667
          groups: 21
          home: /home/westosuser2

在这里插入图片描述

二.条件

when:
                   - 条件1
                   - 条件2

#条件判断#
=			        value == "字符串",value == 数字
<			        value <  数字
>			        value >  数字
<=			        value <= 数字
>=			        value >= 数字 
!=			        value != 数字
is defined value	value is defined	变量存在
is not defined		value is not defined	变量不存在
bool变量 为true		value			value的值为true
bool变量 false		not value		value的值为false
value in value2		value的值在value2列表中
#多条条件组合#
when:              条件1 and 条件2
                    - 条件1
                    - 条件2

when:
  条件1 or 条件2

when: >
  条件1
  or
  条件2

在这里插入图片描述

三.触发器

notify:		触发器当遇到更改是触发handlers
handlers:	触发器触发后执行的动作

在这里插入图片描述
在这里插入图片描述

四.处理失败任务

1.ignore_errors
#作用:
当play遇到任务失败是会终止
ignore_errors: yes 将会忽略任务失败使下面的任务继续运行

#实例#
- name: test
  dnf:
    name: westos
    state: latest
  ignore_errors: yes
  
- name: create file
  file:
    path: /mnt/westos
    state: touch
  1. force_handlers
    作用:当任务失败后play被终止也会调用触发器进程

在这里插入图片描述

3.changed_when
作用: 控制任务在何时报告它已进行更改
在这里插入图片描述
4.failed_when 当符合条件时强制任务失败
在这里插入图片描述
5.block

block: 		    ##定义要运行的任务
rescue:		    ##定义当block句子中出现失败任务后运行的任务
always:	        ##定义最终独立运行的任务

测试练习#
建立playbook ~/westos.yml要求如下:
建立大小为1500M名为/dev/vdb1的设备
如果/dev/vdb不存在请输入:
/dev/vdb is not exist
如果/dev/vdb大小不足2G请输出:
/dev/vdb is less then 2G
并建立800M大小的/dev/vdb1
此设备挂载到/westos上

---
- name: disk 
  hosts: all
  tasks:
    - name: check dev_vdb
      debug:
        msg: "{{ansible_facts.enp1s0.ipv4.address }} is not exist with /dev/vdb"
      when: ansible_facts.devices.vdb is not defined
    - name: test block
      block:
        - name: create 1500M vdb1
          parted:
            device: /dev/vdb
            number: 1
            state: present
            part_end: 1.5GiB
          when: ansible_facts.devices.vdb is defined
      rescue:
        - name: create disk
          parted:
            device: /dev/vdb
            number: 1
            state: present
            part_end: 800MiB
        - debug:
            msg: "{{ansible_facts.enp1s0.ipv4.address}} is less then 1500 MiB "

      always:
        - name: filesystem
          filesystem:
            dev: /dev/vdb1
            fstype: xfs
          when: ansible_facts.devices.vdb is defined
        - name: mounted
          mount:
            path: /westos
            src: /dev/vdb1
            fstype: xfs
            state: mounted
          when: ansible_facts.devices.vdb is defined


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Ansible 是一个流行的 IT 自动化工具,它使用 Playbook(剧本)来定义和执行配置管理任务,其核心概念之一就是任务委派(Task Delegation)。在 Ansible 任务委派允许管理员将责任委派给更具针对性的“子任务”或“模块”,这些模块可以在远程服务器上运行,而无需明确地指定每一步的操作细节。 任务委派主要体现在以下几个方面: 1. **Role-based Execution**: Ansible 通过 Roles(角色)来组织任务。一个 Role 包含一组预定义的配置、任务和变量,可以根据需要轻松地在多个 Playbook 复用。这样,你可以把一些常见的操作,如软件安装、服务管理等,封装成角色,然后在其他 Playbook 调用。 2. **Inventory Management**: Ansible 可以管理和控制多个服务器(Inventory),每个服务器可能有不同的配置需求。任务可以通过 Inventory 的 Host Patterns 或 Group Names 进行委派,确保只对特定的机器执行相关操作。 3. **Conditional Tasks**: 使用条件语句(如 `when`),你可以根据服务器的状态或变量值来决定是否执行某些任务。这种灵活的委派机制使得任务的执行更加智能和高效。 4. **Module-based Approach**: Ansible 提供大量的预定义模块(Modules),用于完成各种操作,如文件管理、网络配置、应用部署等。管理员只需要调用合适的模块并传递参数,就可以让 Ansible 执行相应的任务。 相关问题: 1. Ansible 如何通过 Roles 来组织任务? 2. Inventory 在 Ansible 起到什么作用? 3. 什么是 Ansible 的 Inventory Management 并举例说明? 4. 何时会使用 `when` 条件语句来委派任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值