Ansible - [09] 高级语法
error 处理机制
默认 ansible 在遇到 error 会立刻停止 playbook
[root@control ansible]# cat ~/ansible/error.yml
---
- hosts: test
  tasks:
    - name: start a service that does not exist.
      service:
        name: hehe
        state: started
    - name: touch a file
      file:
        path: tmp/service.txt
        state: touch如果第一个任务不能成功执行,那么剧本就会中止,不会执行后续任务。
如果想要在第一个任务执行失败之后,继续执行后续任务,那么……
可以在剧本中添加:ignore_errors: true,可以忽略错误,继续后续的任务
[root@control ansible]# cat ~/ansible/error.yml
---
- hosts: test
  tasks:
    - name: start a service that does not exist.
      service:
        name: hehe
        state: started
      ignore_errors: true
    - name: touch a file.
      file:
        path: /tmp/service.txt
        state: touch以上配置针对是某个任务,如果针对剧本全局忽略错误,可以进行如下配置.
[root@control ansible]# cat ~/ansible/error.yml
---
- hosts: test
  ignore_errors: true
  tasks:
    - name: start a service that does not exist.
      service:
        name: hehe
        state: started
    - name: touch a file.
      file:
        path: /tmp/service.txt
        state: touchhandlers
当某个任务需要依赖其他任务怎么办?
- 可以通过handlers定义一组任务
- 仅当某个任务触发(notify)handlers时才执行相应的任务
- 如果有多个notify触发执行handlers任务,也仅执行一次
- 仅当任务的执行状态为changed时,handlers任务才执行
- handlers任务在所有其他任务都执行后才执行
[root@control ansible]# cat ~/ansible/handlers.yml
---
- hosts: test
  tasks:
    - name: create directory.
      file:
        path: /tmp/parents/subdir/
        state: directory
      notify: touch file
  handlers:
    - name: touch file
      file:
        path: /tmp/parents/subdir/new.txt
        state: touch多次执行playbook该任务状态不再是changed
notify后面名称必须和handlers中的任务名称一致
when 条件判断
- when可以定义判断条件,条件为真时才执行某个任务
- 常见条件操作符如:==、!=、>、>=、<、<=
- 多个条件可以使用and或or分割
- when表达式中调用变量不要使用{{ }}
1、远程主机剩余内存不足700M则关闭NetworkManager
[root@control ansible]# cat ~/ansible/when_1.yml
---
- hosts: test
  tasks:
    - name: check memory size.
      service:
        name: NetworkManager
        state: stopped
      when: ansible_memfree_mb < 7002、判断操作系统是RedHat8则创建测试文件(支持多行输入,不保留换行符)
[root@control ansible]# cat ~/ansible/when_2.yml
---
- hosts: test
  tasks:
    - name: touch a file
      file:
        path: /tmp/when.txt
        state: touch
      when: >
        ansible_distribution == "RedHat"
            and
        ansible_distribution_major_version == "8"block 任务块
使用block可以将多个任务合并为一个组
[root@control ansible]# cat ~/ansible/block_1.yml
---
- hosts: test
  tasks:
    - name: define a group of tasks.
      block:
        - name: install httpd
          yum:
            name: httpd
            state: present
        - name: start httpd
          service:
            name: httpd
            state: started
      when: ansible_distribution == "RedHat"rescue 定义block任务执行失败时要执行的其他任务
always 定义无论block任务是否成功,都要执行的任务
[root@control ansible]# cat ~/ansible/block_2.yml
---
- hosts: test
  tasks:
    - block:
        - name: touch a file test1.txt
          file:
            path: /tmp/test1.txt
            state: touch
      rescue:
        - name: touch a file test2.txt
          file:
            path: /tmp/test2.txt
            state: touch
      always:
        - name: touch a file test3.txt
          file:
            path: /tmp/test3.txt
            state: touchloop 循环
1、循环创建多个目录
[root@control ansible]# cat ~/ansible/simple_loop.yml
---
- hosts: test
  tasks:
    - name: mkdir multi directory.
      file:
        path: /tmp/{{ item }}
        state: directory
      loop:
        - School
        - Legend
        - Lifeitem是关键字
2、循环创建多个用户
[root@control ansible]# cat ~/ansible/complex_loop.yml
---
- hosts: test
  tasks:
    - name: create multi user.
      user:
        name: "{{ item.iname }}"
        password: "{{ item.ipass | password_hash('sha512') }}"
      loop:
        - { iname: 'term', ipass: '123456' }
        - { iname: 'amy', ipass: '654321' }Ansible - [09] 高级语法的更多相关文章
- tn文本分析语言(三):高级语法
		标签(空格分隔): 未分类 高级操作 1.脚本表达式 用双引号包含的脚本被称为脚本表达式,目前支持嵌入Python. 脚本表达式只能在顺序表达式中使用.代码可以在三个位置存在: |位置|功能|例子| ... 
- Swift高级语法学习总结(转)
		Swift高级语法学习总结 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如果有参数和返回值直接写在两个括号里就可以了 1.2 参 ... 
- CSS 高级语法 ---- 继承和选择器的分组
		1. 选择器的分组 ————————————————————————— 可以对选择器进行分组,被分组的选择器享用共同的声明. h1,h2,h3,h4,h5,h6 { color: green; ... 
- Swift高级语法学习总结
		Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如 ... 
- C++ 高级语法学习与总结(代码实例)
		C++11增加了许多的特性,auto就是一个很明显的例子. 还有就是typedid()获取数据变量的类型 看下面简短的代码: atuo: 很像java中的加强for循环..... //获取一个数据 ... 
- Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础
		本节内容: 1. 面向对象高级语法部分 1.1 静态方法.类方法.属性方法 1.2 类的特殊方法 1.3 反射 2. 异常处理 3. Socket开发基础 1. ... 
- iOS开发——语法篇OC篇&高级语法精讲二
		Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和 ... 
- iOS开发——语法篇OC篇&高级语法精讲
		高级语法精讲 一.NSSet.NSMutableSet集合的介绍 1)NSSet.NSMutableSet集合,元素是无序的,不能有重复的值. 2)用实例方法创建一个不可变集合对象 例如: //宏定义 ... 
- iOS开发——OC篇&OC高级语法
		iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ... 
- Scala进阶之路-Scala高级语法之隐式(implicit)详解
		Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ... 
随机推荐
- Linux(ubuntu18)下 Qt linguist 在哪里 找不到
			1.首先找到Qt安装目录. 2.通过命令查找linguist. find . -name linguist 3.制作桌面快捷方式. 在/usr/share/applications目录下新建lingu ... 
- js面试题-代码实现
			新 API 最新的 url 参数获取的 API? URLSearchParams // 有如下一个url: http://localhost?a=1&b=2 function getUrlPa ... 
- 哪家开源 ChatGPT 生成代码好
			试玩 poe 上的代码生成器,Sage,Claud-instant,Dragonfly 效果都不错,太省事了.于是想找一下开源平替哪家强,回头在自己的显卡上跑起来. 我试验的内容是 根据下面的函数编写 ... 
- 【软件工程与UML】第1章 笔记和练习题
			基本概念 软件 = 程序 + 数据 + 文档 软件的特点 抽象性:软件是一种逻辑实体 可复制性:软件是通过人们智力活动,把知识和技术转化为信息的一种产品. 不会磨损: 依赖性:软件的开发和运行经常收到 ... 
- rocketMq4.2.0启动broker报错找不到或无法加载主类 Files\Java\jdk1.8.0_101\lib\dt.jar;C:\Program]
			假如弹出提示框提示'错误: 找不到或无法加载主类 xxxxxx'.打开runbroker.cmd,然后将'%CLASSPATH%'加上英文双引号.保存并重新执行start语句.做如下图处理 但是输出还 ... 
- StarRocks元数据无法合并
			一.先说结论 如果您的StarRocks版本在3.1.4及以下,并且使用了metadata_journal_skip_bad_journal_ids来跳过某个异常的journal,结果之后就出现了FE ... 
- [转]OpenCV4.8 GPU版本CMake编译详细步骤 与CUDA代码演示
			导 读 本文将详细介绍如何使用CMake编译OpenCV4.8 CUDA版本并给出Demo演示,方便大家学习使用. CMake编译详细步骤 废话不多说,直接进入正题! [1]我使用的工具版本VS201 ... 
- VisualSFM的配置与使用 & MeshLab的网格生成与纹理添加
			VisualSFM的配置与使用 & MeshLab的网格生成与纹理添加 翻译 搜索 复制 
- MACOS 降级
			最近升级了macos 15.2,结果导致外接显示器显示不正常,经常断掉或者黑屏,因此macos进行降级处理: 1. 首先在App Store下载Ventura 系统; 2. 准备一个16G的U盘,然后 ... 
- 安装Rational rose软件简单教程
			安装Rational rose软件简单教程 一.下载文件 百度云盘下载链接:https://pan.baidu.com/s/1QWmTgxKlQtE5flP7dXIF5w 提取码:wjnq 二.装虚拟 ... 
