• 【Ansible】 实施任务控制


    实施任务控制

    编写循环和条件任务

    思考以下代码,使用两次service模块来保证两个服务处于运行状态

    ---
    - name: loop
      hosts: 172.16.10.9
      tasks:
        - name: httpd is running
          service:
              name: httpd
              state: started
        - name: firewalld is running
          service:
             name: firewalld
             state: started
    ...
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    请添加图片描述

    这两个任务可以重新编写一个循环,只需要一个任务就可以确保两个服务都在运行

    ---
    - name: loop
      hosts: all
      tasks:
       - name: loop running
         service:
           name: "{{ item }}"
           state: started
         loop:
           - httpd
           - firewalld
    ...
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    请添加图片描述

    还可以对代码进行优化

    使用vars给loop提供一个列表

    ---
    - name: loop
      hosts: all
      vars:
        mail_services:
           - httpd
           - firewalld
      tasks:
       - name: loop running
         service:
           name: "{{ item }}"
           state: stopped
         loop: "{{ mail_services }}"
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    循环散列或字典列表

    loop列表并不仅是简单列表,以下内容中,列表中每个项实际是一个散列或是字典,每个散列有两个键,即name和groups,当前item循环变量中每个键都可以通过item.name和item.groups进行检索

    ---
    - name: user
      hosts: all
      tasks:
        - name: create user
          user:
             name: chaijin
             state: present
             groups: root
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    ---
    - name: user
      hosts: all
      tasks:
        - name: create user
          user:
             name: "{{ item.name }}"
             state: present
             groups: "{{ item.groups }}"
          loop:
            - name: jane
              groups: root
            - name: xiaohong
              groups: root
    ...
    ~      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    请添加图片描述请添加图片描述

    条件任务

    Ansible可以使用conditionals在符合特定的条件时执行任务或者play

    使用场景

    • 可在变量中定义限制,将受管理主机的内存进行比较
    • Ansible可以捕捉评估命令的输出,以确定某一任务在执行进一步操作前是否以及完成,比如,某一程序运行失败,则绕过该操作
    • 可以利用Ansible来确定受管理设备的网络设置,并决定要发送的模板文件
    • 评估cpu数量,来调节web服务器

    when:适用于有条件的运行任务,他要测试的条件为值,如果条件满足,则执行该任务,若不满足,跳过该任务

    ---
    - name: true and false
      hosts: 172.16.10.9
      vars:
        run_my_task: True
    
    
      tasks:
         - name: httpd
           yum:
             name: httpd
           when: run_my_task
    ...
    ~     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    操作示例
    等于(字符串)ansible——machine==“x86_64”
    等于(数字)max_memory==512
    变量存在min_memory is defined
    变量不存在min_memory is not defined
  • 相关阅读:
    OA管理系统源码
    Kotlin中正确的使用Handler
    软件工程与计算总结(十二)详细设计的基础
    kubernetesr进阶--条件化的污点(TaintNodesByCondition)
    快速认识什么是:Docker
    手把手教你使用Java生成助记词、私钥、地址|Java区块链钱包生成助记词、地址
    【LeetCode】45. 跳跃游戏 II
    Oracle修改数据之后提交事务如何回滚?
    手把手教你 Jenkins 自动部署 SpringBoot 多模块应用
    稳进的科大讯飞,重点赛道多点开花
  • 原文地址:https://blog.csdn.net/weixin_46532751/article/details/126084789