Ansible的YAML语法

文章目录

  • 环境
  • YAML基础
  • 换行
  • 引号
    • 考一考
  • Ansible变量
  • 布尔值
  • 参考

环境

  • 管理节点:Ubuntu 22.04
  • 控制节点:CentOS 8
  • Ansible:2.15.6

YAML基础

  • --- :文件开头(可选)
  • ... :文件结尾(可选)
  • - :哈希(hash),注意 - 后面要有空格
  • : :字典(dictionary),注意 : 后面要有空格
  • # :注释,注意如果是行内注释,则 # 前面要有空格

比如:

---
- name: Tom # some commentage: 20sport:- football- basketball
# another comment
- name: Jerryage: 18sport:- swim- tennis- football
...

Dictionary也可以写成如下形式:

{name: Tom, age: 20}

List也可以写成如下形式:

[football, basketball]

换行

一个字符串可以跨多行:

  • \n :换行符
  • | :多行,把换行转换为 \n
  • > :多行,把换行转换为空格

比如:

---
- hosts: allvars:var1: |abcdefghijklmnopqrstuvwxyzvar2: >abcdefghijklmnopqrstuvwxyztasks:- name: task1debug:msg: "{{ var1 }}"- name: task2debug:msg: "{{ var2 }}"

运行结果如下:

TASK [task1] ***************************************************************************************
ok: [192.168.1.55] => {"msg": "abcdefg\nhijklmn\nopqrst\nuvwxyz\n"
}TASK [task2] ***************************************************************************************
ok: [192.168.1.55] => {"msg": "abcdefg hijklmn opqrst uvwxyz\n"
}

注意:所有行的缩进要一致。

这两种方式下:

  1. 缩进都会被忽略
  2. 行末的空白符都会保留

使用 > 的时候,如果所有行的缩进不一致,或者有空行,则会保留换行符,比如:

---
- hosts: allvars:var1: >abcdefgtasks:- name: task1debug:msg: "{{ var1 }}"

运行结果如下:

TASK [task1] ***************************************************************************************
ok: [192.168.1.55] => {"msg": "a b\nc d\n  e\nf g\n"
}

当然,也可以直接使用 \n 来表示换行。

引号

一般情况下,字符串可以不用引号,比如:

description: Hello world!

但是有一些特例:若不用引号,则有一些字符不能出现在字符串开头处:

  • [
  • ]
  • {
  • }
  • >
  • |
  • *
  • &
  • !
  • %
  • #
  • `
  • @
  • ,

此外,对于以下符号:

  • ?
  • :
  • -

如果其后不是空格,才可以出现在字符串开头处。

---
- hosts: alltasks:- name: task1debug:msg: ?abc- name: task2debug:msg: :abc- name: task3debug:msg: -abc

说了半天这么麻烦,不如还是加上引号吧,省事。

单引号或者双引号都可以,二者区别在于,单引号包含的是literal的内容,而双引号的内容可以转义。

比如:

var1: 'ab\ncd\tef'
var2: "ab\ncd\tef"
  • var1 :literal的字符串
  • var2 :包含了一个换行和一个制表符

下面写法是错误的:

var1: "ab\c"

因为在双引号里, \ 后面要跟一个转义符,比如 ntb\ 等。

考一考

如何用双引号表示literal的 ab\ncd\tef

答:

var1: "ab\\ncd\\tef"

注意literal的 \ 在双引号里要写成 \\

Ansible变量

语法: {{ <variable> }}

在单引号和双引号中都可以使用变量,比如:

---
- hosts: allvars:var1: "aaa"var2: "bbb\nccc {{ var1 }}"var3: 'bbb\nccc {{ var1 }}'tasks:- name: task1debug:msg: "{{ var2 }}" # bbb\nccc aaa- name: task2debug:msg: '{{ var2 }}' # bbb\nccc aaa- name: task3debug:msg: "{{ var3 }}" # bbb\\nccc aaa- name: task4debug:msg: '{{ var3 }}' # bbb\\nccc aaa

可见,在单引号和双引号里,变量都可以被解析。

注:这一点是和shell脚本不同的,shell脚本里只能在双引号里使用变量,而单引号里都是literal的字符串。

注意:输出结果相当于是双引号的内容,而变量里单引号里的 \ 是literal字符,所以在输出结果里被转义为 \\

那么问题来了,如果是literal的 {{ var2 }} ,要如何处理呢?

一种方式是在template里使用literal的字符串:

---
- hosts: alltasks:- name: task1debug:msg: "{{ '{{ var2 }}' }}" # {{ var2 }}

应该还有别的简单方法吧(比如转义什么的),暂时没有深究。

布尔值

很简单,想要字符串就加上引号,想要布尔值就不要加引号,比如:

  • "yes" / "no" / "true" / "false" :字符串
  • yes / no / true / false :布尔值

比如:

---
- hosts: allvars:var1: "yes"var2: yestasks:- name: task1debug:msg: "{{ var1 | type_debug }}" # AnsibleUnicode- name: task2debug:msg: "{{ var2 | type_debug }}" # bool- name: task3debug:msg: "{{ 'yes' | type_debug }}" # str- name: task4debug:msg: "{{ yes | type_debug }}" # AnsibleUndefined

注意:在task2里,把 yes 赋值给变量,其类型被隐式转换为 bool 。在task4里,literal的 yes ,其类型是 AnsibleUndefined 。而literal的 true ,其类型则直接就是 bool

参考

  • https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html

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

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

相关文章

C语言编程题-单身狗

题号&#xff1a;BYTE1562 单身狗1 题目描述&#xff1a;一个数组中只有一个数字是出现一次&#xff0c;其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。 例如&#xff1a; 有数组的元素是&#xff1a;1&#xff0c;2&#xff0c;3&#xff0c;4&…

pgsql_postgresql表的继承关系查询

pgsql_postgresql表的继承关系查询 pgsql_postgresql表的继承关系查询前言向上反查表的继承关系SQL系统表说明pg_classpg_namespacepg_inheritspgsql with 语法 pgsql_postgresql表的继承关系查询 前言 表继承是pgsql的一个特性&#xff0c;通过表继承可以方便的实现表数据的…

使用OpenCV和PIL库读取图片的区别

OpenCV 和 PIL&#xff08;Pillow&#xff09;是两个不同的图像处理库&#xff0c;它们使用不同的数据结构来表示图像。 OpenCV 格式图像&#xff1a; OpenCV 中的图像通常表示为 NumPy 数组。这些数组可以是多维的&#xff0c;例如对于彩色图像&#xff0c;它们是三维数组&am…

Golang学习之路一开山篇

Golang学习之路一开山篇 初识 Golang 我第一次接触 Golang 是在2016年, 当时在深圳工作, 项目需要用Golang, 当时在犹豫要不要学还是走, 毕竟Java开发搞了很多年了, 说放弃还是有难度的, 其实也不是放弃Java, 说不定其他项目还是要使用Java. 在领导的再三劝说下, 开启了Golan…

嵌入式开发人员需要具备哪些能力?

大家好&#xff0c;今天给大家介绍嵌入式开发人员需要具备哪些能力&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 嵌入式开发人员需要具备以下能力&#xff1a; 熟练掌握C/C语…

Kubernetes 的用法和解析 -- 2

一.集群常用指令 1.1 基础控制指令 # 查看对应资源: 状态 $ kubectl get <SOURCE_NAME> -n <NAMESPACE> -o wide [rootkube-master ~]# kubectl get pods -n kuboard -o wide# 查看对应资源: 事件信息 $ kubectl describe <SOURCE_NAME> <SOURCE_NAME_R…

产品入门第五讲:Axure交互和情境

目录 一.Axure交互和情境的介绍 1.交互介绍 概念 常见的Axure交互设计技巧 2.情境介绍 概念 常见的Axure情境设计技巧&#xff1a; 二.实例展示 1.ERP登录页到主页的跳转 2.ERP的菜单跳转到各个页面 &#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个…

七. 使用ts写一个贪吃蛇小游戏

之前学习了几篇的ts基础&#xff0c;今天我们就使用ts来完成一个贪吃蛇的小游戏。 游戏拆解 我们将我们的任务进行简单拆解分析。 首先我们应该有一个窗口&#xff0c;我们叫做屏幕。让蛇在里面移动&#xff0c;所有我们应该想到要设计一个大盒子当作地图。考虑到食物以及蛇…

【LeetCode刷题笔记(7-1)】【Python】【四数之和】【哈希表】【中等】

文章目录 四数之和题目描述示例 1示例 2提示解决方案1&#xff1a;【四层遍历查找】解决方案2&#xff1a;【哈希表】【三层遍历】 结束语 四数之和 四数之和 题目描述 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件…

服务器一直掉线怎么回事?

随着网络的高速发展&#xff0c;不管是网站还是游戏&#xff0c;如果遇到服务器卡顿的情况&#xff0c;会造成用户访问网站或进游戏&#xff0c;网站页面长时间无法打开&#xff0c;游戏页面运行卡顿&#xff0c;这样就很容易会造成用户的流失&#xff0c;从而导致业务亏损极大…

可视化数据监控大屏网页界面,数据大屏模版PS资料(免费UI源文件)

数据大屏模板在大数据领域被广泛应用&#xff0c;其优势在于能够将复杂的数据通过图形、图表等方式呈现出来&#xff0c;使数据更易于理解。数据大屏模板可以用来进行数据分析。通过对数据的比较、趋势分析、异常检测等&#xff0c;可以发现数据中的规律和问题&#xff0c;为决…

Appium知多少

Appium我想大家都不陌生&#xff0c;这是主流的移动自动化工具&#xff0c;但你对它真的了解么&#xff1f;为什么很多同学搭建环境时碰到各种问题也而不知该如何解决。 appium为什么英语词典查不到中文含义&#xff1f; appium是一个合成词&#xff0c;分别取自“application…

51单片机项目(21)——基于51单片机的音乐流水灯

1.功能描述 本次所做设计&#xff0c;有流水灯的功能&#xff0c;使用了16颗LED灯&#xff0c;同时还可以播放音乐。单片机存储了三首音乐&#xff0c;通过声音检测模块触发其进行切换。&#xff08;仿真图里面使用一个按键来代码声音检测模块&#xff09; 此外&#xff0c;还…

四十七、Redis分片集群

目录 一、分片集群结构 二、散列插槽 1、Redis如何判断某个key应该在哪个实例&#xff1f; 2、如何将同一类数据固定的保存在同一个Redis实例&#xff1f; 三、集群伸缩 四、故障转移 1、当集群中有一个master宕机时 &#xff08;1&#xff09;自动转移 &#xff08;2&…

ORACLE 如何单机转RAC

生产库停监听 [oracleprimary backup1]$ lsnrctl stop 生产库启停数据库 shutdown immediate Startup mount 生产库全库备份&#xff1a; rmanbackup.sh export ORACLE_BASE/oracle/app export ORACLE_HOME/oracle/app/product/11.2.0/db_1 export ORACLE_SIDtest …

Linux 常用解压命令tar和zip(详细篇)

# tar 入门 介绍 在Linux平台上,tar 命令是主要的归档实用程序。了解各种 tar 命令选项将帮助您掌握归档文件操作。tar 代表磁带存档。 语法 tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-C <目的目录>][-f <备份文件>][--delete][--totals][文件或目录...] 以前 un…

使用opencv的Laplacian算子实现图像边缘检测

1 边缘检测介绍 图像边缘检测技术是图像处理和计算机视觉等领域最基本的问题&#xff0c;也是经典的技术难题之一。如何快速、精确地提取图像边缘信息&#xff0c;一直是国内外的研究热点&#xff0c;同时边缘的检测也是图像处理中的一个难题。早期的经典算法包括边缘算子方法…

Linux的文件系统 内核结构

Linux的文件系统 Q1&#xff1a;什么是文件系统&#xff1f; A&#xff1a;在学术的角度下&#xff0c;文件系统指“操作系统用于明确存储设备组织文件的方法”&#xff0c;是“文件管理系统”的简称&#xff0c;本质也是代码&#xff0c;一段程序 Q2&#xff1a;文件系统&…

Java带缓存的单向链表-线程安全

开发原因 ArrayList太重&#xff0c;线程还不安全 在一些队列处理的时候&#xff0c;ArrayList有点麻烦&#xff0c;还比较占内存&#xff0c;还没缓存&#xff0c;又得再加个缓存队列 所以就开发了这个 轻量级&#xff0c;线程安全&#xff0c;带缓存&#xff01;nice!! 源码…

Elasticsearch:相关性工作台 - BM25 及 ELSER 的相关性比较

我们知道 Elastics Learned Sparse EncoderR (ELSER) 可以被用来做语义搜索。它是一个 out-of-domain 的语义搜索模型。无需训练&#xff0c;我们就可以得到很好的相关性。有关 ELSER 的更多知识&#xff0c;请参考文章 “Elastic Learned Sparse Encoder 简介&#xff1a;Elas…