Ansible剧本流程控制

news2024/12/24 21:32:34

handlers触发器

notify:监控上面的模块执行是否发生变化
chufa:自定义的任务名称,自动去handlers里面匹配相对应的任务名称执行动作
下方是copy了/data/copy/下的文件到server2组里的主机/data/monster/handlers/下,notify监控发生了变化后触发chufa任务。

- hosts: server2
  gather_facts: no
  tasks:
    - name: handlers触发器demo
      copy:
        src: /data/copy/
        dest: /data/monster/handlers/
      notify:
        - chufa
  handlers:
    - name: chufa
      shell: 'date >> /data/monster/handlers/time.log'
[root@monster2 handlers]# cat /data/monster/handlers/time.log 
Wed Dec 28 17:20:15 EST 2022
[root@monster2 handlers]# 

when条件

下面剧本是所有主机里面,主机名叫monster2或monster3的就删除handlers目录
gather_facts需要设置开启或者直接不写这一行默认是开启,因为需要使用内置变量ansible_hostname验证主机名
如果只判断一台主机可以直接ansible_hostname == “monster2”

- hosts: all
  gather_facts: yes
  tasks:
    - name: when使用
      shell: rm -rf /data/monster/handlers
      when: (ansible_hostname is match ("monster2|monster3"))

警告无视就行,它建议不要直接使用rm删除,通过文件模块用state=absent的方式
下面可以看见,138(mosnter2),139(mosnter3)两台主机都执行成功了,但是只有只有138有修改状态,因为monster3上面没有这个目录,skipped跳过。

在这里插入图片描述

with_items循环

删除所有/data/monster/下的monster.log 和monster.yml文件,变量名默认item没有s,with_items里面的变量全匹配后任务才执行完

- hosts: all
  gather_facts: no
  tasks:
    - name: with_items使用
      shell: rm -rf /data/monster/{{item}}
      with_items:
        - monster.log
        - monster.yml

with_items多变量循环

同样with_items里面的变量全匹配后任务才执行完
使用键值对key:value的形式
touch:创建,absent:删除

- hosts: all
  gather_facts: no
  tasks:
    - name: 创建目录with
      file:
        path: /data/monster/with
        state: directory
    - name: 循环创建文件monster1-5,最后再删掉文件2。
      file:
        path: /data/monster/with/{{item.mulu}}
        state: "{{item.wenjian}}"
      with_items:
        - { mulu: 'monster1', wenjian: 'touch' }
        - { mulu: 'monster2', wenjian: 'touch' }
        - { mulu: 'monster3', wenjian: 'touch' }
        - { mulu: 'monster4', wenjian: 'touch' }
        - { mulu: 'monster5', wenjian: 'touch' }
        - { mulu: 'monster2', wenjian: 'absent' }

在这里插入图片描述
分发主机查看with目录结构,monster2最后被删了,只有1345

[root@monster2 with]# tree
.
├── monster1
├── monster3
├── monster4
└── monster5

[root@mosnter3 with]# tree
.
├── monster1
├── monster3
├── monster4
└── monster5

tags标签

写法和上面一样,和模块同级对其,使用 - 方式设置标签
可打多个标签,也可以重复标签

- hosts: server2
  gather_facts: no
  tasks:
    - name: 分发到monster2主机
      copy:
        src: /data/www/monster.cn/v0.0.10
        dest: /data/www/monster.cn/
        backup: yes
      tags:
        - v0.0.10
- hosts: server3
  gather_facts: no
  tasks:
    - name: 分发到monster2主机
      copy:
        src: /data/www/monster.cn/v0.0.9
        dest: /data/www/monster.cn/
        backup: yes
      tags:
        - v0.0.9

单独安标签执行剧本
-t 指定标签 剧本文件

[root@monster1 ~]# ansible-playbook -t v0.0.10 juben.yml 

查看目录结构

[root@monster2 www]# tree
.
└── monster.cn
    └── v0.0.10
        └── index.html

2 directories, 1 file

指定多个标签,标签之间用逗号隔开

[root@monster1 ~]# ansible-playbook -t v0.0.10,v0.0.9 juben.yml 

刚才v0.0.10执行过了,138未做更改
如果目录没有修改,只修改里面的文件内容同样会识别到,重新分发
在这里插入图片描述

查看目录结构

[root@mosnter3 www]# tree
.
└── monster.cn
    └── v0.0.9
        └── index.html

2 directories, 1 file
[root@mosnter3 www]# 

ignore_errors忽略错误

忽略错误使用:同样在模块同级对其,ignore_errors:yes
如下在第一个任务创建目录的时候故意弄错,先把忽略错误注释掉,执行看看

- hosts: server2
  gather_facts: no
  tasks:
    - name: monster2故意创建错的目录
      file:
        path: /data/monster/error.log/
        state: touch
      tags:
          - test_error
#      ignore_errors: yes
- hosts: server3
  gather_facts: no
  tasks:
    - name: 忽略monster2错误会执行此任务
      file:
        path: /data/monster/error.log
        state: touch
      tags:
        - test_error

提示致命错误,然后就结束剧本了
在这里插入图片描述

把注释去掉后,仍能提示任务1的致命错误,但是紧接着后面…ignoring(忽略),然后任务2的接着执行了

[root@monster1 ~]# ansible-playbook -t test_error juben.yml 
 ________________
< PLAY [server2] >
 ----------------
      \                    / \  //\
       \    |\___/|      /   \//  \\
            /0  0  \__  /    //  | \ \    
           /     /  \/_/    //   |  \  \  
           @_^_@'/   \/_   //    |   \   \ 
           //_^_/     \/_ //     |    \    \
        ( //) |        \///      |     \     \
      ( / /) _|_ /   )  //       |      \     _\
    ( // /) '/,_ _ _/  ( ; -.    |    _ _\.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/\      /                 ~-. _ .-~      .-~^-.  \
 (( /// ))      `.   {            }                   /      \  \
  (( / ))     .----~-.\        \-'                 .~         \  `. \^-.
             ///.----..>        \             _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

 _________________________
< TASK [monster2故意创建错的目录] >
 -------------------------
      \                    / \  //\
       \    |\___/|      /   \//  \\
            /0  0  \__  /    //  | \ \    
           /     /  \/_/    //   |  \  \  
           @_^_@'/   \/_   //    |   \   \ 
           //_^_/     \/_ //     |    \    \
        ( //) |        \///      |     \     \
      ( / /) _|_ /   )  //       |      \     _\
    ( // /) '/,_ _ _/  ( ; -.    |    _ _\.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/\      /                 ~-. _ .-~      .-~^-.  \
 (( /// ))      `.   {            }                   /      \  \
  (( / ))     .----~-.\        \-'                 .~         \  `. \^-.
             ///.----..>        \             _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

fatal: [192.168.71.138]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "msg": "Error, could not touch target: [Errno 21] Is a directory: '/data/monster/error.log/'", "path": "/data/monster/error.log/"}
...ignoring
 ________________
< PLAY [server3] >
 ----------------
      \                    / \  //\
       \    |\___/|      /   \//  \\
            /0  0  \__  /    //  | \ \    
           /     /  \/_/    //   |  \  \  
           @_^_@'/   \/_   //    |   \   \ 
           //_^_/     \/_ //     |    \    \
        ( //) |        \///      |     \     \
      ( / /) _|_ /   )  //       |      \     _\
    ( // /) '/,_ _ _/  ( ; -.    |    _ _\.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/\      /                 ~-. _ .-~      .-~^-.  \
 (( /// ))      `.   {            }                   /      \  \
  (( / ))     .----~-.\        \-'                 .~         \  `. \^-.
             ///.----..>        \             _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

 ___________________________
< TASK [忽略monster2错误会执行此任务] >
 ---------------------------
      \                    / \  //\
       \    |\___/|      /   \//  \\
            /0  0  \__  /    //  | \ \    
           /     /  \/_/    //   |  \  \  
           @_^_@'/   \/_   //    |   \   \ 
           //_^_/     \/_ //     |    \    \
        ( //) |        \///      |     \     \
      ( / /) _|_ /   )  //       |      \     _\
    ( // /) '/,_ _ _/  ( ; -.    |    _ _\.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/\      /                 ~-. _ .-~      .-~^-.  \
 (( /// ))      `.   {            }                   /      \  \
  (( / ))     .----~-.\        \-'                 .~         \  `. \^-.
             ///.----..>        \             _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

changed: [192.168.71.139]
 ____________
< PLAY RECAP >
 ------------
      \                    / \  //\
       \    |\___/|      /   \//  \\
            /0  0  \__  /    //  | \ \    
           /     /  \/_/    //   |  \  \  
           @_^_@'/   \/_   //    |   \   \ 
           //_^_/     \/_ //     |    \    \
        ( //) |        \///      |     \     \
      ( / /) _|_ /   )  //       |      \     _\
    ( // /) '/,_ _ _/  ( ; -.    |    _ _\.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/\      /                 ~-. _ .-~      .-~^-.  \
 (( /// ))      `.   {            }                   /      \  \
  (( / ))     .----~-.\        \-'                 .~         \  `. \^-.
             ///.----..>        \             _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

192.168.71.138             : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=1   
192.168.71.139             : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@monster1 ~]# 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何下载指定版本的xcode

如何下载指定版本的xcode一、安装最新版本xcode二、下载指定版本xcode一、安装最新版本xcode 从苹果商店中获取并安装即可。 但是安装最新版有个风险&#xff0c;就是它有系统版本的要求&#xff0c;比如这里要求macOS版本最低是12.5 如果版本不够的话&#xff0c;可以升级系统…

【蓝桥杯基础题】2020年省赛填空题—既约分数

&#x1f451;专栏内容&#xff1a;蓝桥杯刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录一、题目背景二、题目描述三、题目分析1.求最大公约数①辗转相减法②穷举法③辗转相除法④辗转相除法&#xff08;递归&am…

LVGL之学习篇(一)

LVGL之学习篇(一) 学习目的 LVGL简介 LVGL本身是一个图形库&#xff0c;前身是litterVGL。其作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor&#xff0c;LVGL用C语音编写&#xff0c;以实现最大的兼容性(与C兼容)&#xff0c;模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计…

MATLAB实验三

实验三 &#xff08;实验报告中附上每题的主要程序和结果&#xff09; 1、在命令行窗口中分别输入下列命令&#xff0c;对应输出结果是 A&#xff0e;命令x[-2:2] B&#xff0e;命令xzeros(1,2);x>0 C&#xff0e;命令ydiag(eye(3),1) D&#xff0e;命令[-2:2]30*eye(…

内存分页机制

文章目录内存分页的原因一级页表分页机制的原理一级页表二级页表二级页表概述地址转换启动分页机制内存分页的原因 在还未出现内存分页机制之前&#xff0c;我们都内存分段机制下工作。 但是&#xff0c;这样会有个问题。来看个下方的例子。 进程在分段机制下运行 下图&…

【学习记录】ORBSLAM2均匀化策略源码解析

在ORBSLAM中&#xff0c;为了保证特征的均匀分布使用了均匀化的策略&#xff0c;最近在尝试扩展一下均匀化的内容&#xff0c;所以仔细看了一下ORBSLAM源码里面这部分的内容&#xff0c;之前看源码的时候没有展开仔细看这一部分的代码&#xff0c;这里补充记录一下&#xff0c;…

未来SSD的接口趋势是什么?

针对SSD接口标准&#xff0c;目前业内有两大组织&#xff1a;PCI-SIG&#xff1a;这个就是定义pcie协议标准的那个组织&#xff0c;我们常见的传统接口M.2, U.2, 2.5英寸的接口都归这个组织定义规范。M.2&#xff0c;U.2起源与客户端&#xff0c;也是企业级当前最常用的接口形式…

elasticdump迁移ES数据详解

文章目录elasticdump 简介1.elasticdump导入ES数据到本地json文件2、将本地数据导入es中3、将es导入另一个es4 .其他参数使用--searchBody使用--searchBody 向本机ES导数据使用--typeanalyzer导出分析器elasticdump 简介 elasticdump是一个能够将es的数据快速导入、导出、迁移…

最新最全-中文生物医学命名实体识别最新研究论文、资源、数据集、性能整理分享

本资源旨在跟踪中文生物医学自然语言处理的进展&#xff0c;收集整理相关的论文列表和展示现存方法性能。内容整理自网络&#xff0c;源地址&#xff1a;https://github.com/lingluodlut/Chinese-BioNLP中文电子病历命名实体识别中文电子病历命名实体识别&#xff08;Chinese C…

《操作系统-真象还原》阅读总结/遗憾离场/加倍努力 出人头地

文章目录关于我又被老天算计奇奇怪怪的 BUG调试 BUG 的心理历程最后两天通宵调试程序的宵夜阅读建议本书所有笔记最后关于我又被老天算计 从 2022-09-14 读这本书&#xff0c;原计划是 2022-12-15 之前完成的&#xff0c;我自信能完成&#xff0c;因为11月下旬我已经开始阅读第…

【Linux】初识进程

文章目录进程控制块的引入初识进程控制块(PCB - Process Control Block)什么是PCBLinux下的PCB初见进程ps指令查看进程kill指令挂掉进程通过系统调用接口得到进程的ID(进程标识符)从根目录下的proc文件查看进程通过fork函数创建子进程进程控制块的引入 首先&#xff0c;听到进…

事故复盘 | 对不同的ID更新操作竟然也引发死锁?

对不同的ID更新操作竟然也引发死锁&#xff1f; 文章目录对不同的ID更新操作竟然也引发死锁&#xff1f;背景分析初步分析 - 怀疑程序并发问题进一步分析 - 怀疑主键缺失行级锁失效再进一步分析 - 是否存在死锁条件解决方案复盘附录示例的死锁日志常用故障排查 SQL参考链接背景…

webassembly学习

webassemblywebassembly学习基本理论webassembly介绍wasm介绍基本信息wasm会替换javascript么ASM.js&#xff08;wasm的前身&#xff09;将 WebAssembly 作为编程语言的一种尝试wasm应用场景wasm运行原理周边生态WASI 操作系统接口wasi介绍wasmwasi&#xff08;服务端&#xff…

平台总线式驱动开发——基本框架

1. 总线、设备和驱动 硬编码式的驱动开发带来的问题&#xff1a; 垃圾代码太多结构不清晰一些统一设备功能难以支持开发效率低下 1.1 初期解决思路&#xff1a;设备与驱动分离 struct device来表示一个具体设备&#xff0c;主要提供具体设备相关的资源&#xff08;如寄存器地…

ES为什么要移除types类型

文章目录elasticsearch&#xff08;集群&#xff09;中可以包含多个索引index&#xff08;数据库&#xff09; ,每个索引中可以包含多个类型types&#xff08;表&#xff09; ,每个类型下又包含多个文档Document&#xff08;行&#xff09; ,每个文档中又包含多个字段Field&…

姿态估计评价指标

PCK 正确估计出关键点的百分比 &#xff08;Percentage of Correct Keypoints&#xff09;&#xff0c;现在已基本不用。 PCKik∑iδ(did≤Tk)∑i1PCK_i^k\frac{\sum_i\delta(\frac{d_i}{d}\leq T_k)}{\sum_i1} PCKik​∑i​1∑i​δ(ddi​​≤Tk​)​ 检测出的关键点与其对应…

1 机器学习之线性回归

学习笔记自&#xff0c;慕课网 《Python3 入门人工智能》 https://coding.imooc.com/lesson/418.html#mid33109 麻雀虽小&#xff0c;五脏俱全 1.1 回归分析 1.2 线性回归问题求解 1.3 寻找最合适的 a、b&#xff0c;引入损失函数的概念 尽可能使损失函数最小即找到了最合适的…

(重要)实数域上一切范数等价的证明

证明&#xff1a;实数域上一切范数等价编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;首先需要明确范数等价的条件&#xff0c;这里的条件等价于夹逼&#xff0c;就是A小于等于B&#xff0c;B小于等于A&#xff0c;那么A肯定等于B。利用这个…

【MySQL】InnoDB存储引擎的行结构

文章目录前言1、MySQL的体系结构2、InnoDB逻辑存储结构3、InnoDB记录行结构3.1、概述3.2、语法操作3.3、Compact行格式3.3.1、示意图3.3.2、记录的额外信息3.3.3、记录的真实数据3.3.4、定长字段补充3.4、行溢出前言 MySQL服务器上负责对表中数据的读取和写入工作的部分是存储…

【博学谷学习记录超强总结,用心分享|产品经理基础总结和感悟14】

TOC 第三章&#xff0c; 内容服务平台优化思考 前文中&#xff0c;我们粗略分析了用户阅读内容的诉求和创作者编制内容的诉求&#xff0c;本章笔者尝试结合用户诉求分析平台的内容分发策略&#xff0c;结合创作者诉求分析创作者后台设计思路&#xff0c;创作者后台分析主要从…