自动化运维工具——Ansible(四)——YAML语法

到目前为止,我们一直都在使用INI的配置风格去配置“清单”,其实,/etc/ansible/hosts不仅能够识别INI的配置语法,还能够识别“YAML”的配置语法。

1. 什么是YAML

YAML(Yet Another Markup Language)语言(发音 /ˈjæməl/ )是一个类似 XML、JSON 的标记性语言。YAML 强调以数据为中心,并不是以标识语言为重点。因而 YAML 本身的定义比较简单,号称“一种人性化的数据格式语言”。目的就是方便人类读写。它实质上是一种通用的数据串行化格式。

我们可以以使用YAML编写配置文件,而ansible的清单也支持YAML的语法,所以我们可以使用YAML语法编写清单,从而管理受管主机。

2. YAML配置示例一

在server1中:

vim /etc/ansible/hosts 
all:
 hosts:
  172.25.1.2:
  172.25.1.3:

在这里插入图片描述

上述配置就是使用YAML语法配置的主机清单,非常简单

最上方使用all关键字,all后面有”:”,你一定联想到了,我们之前可以使用all关键字,管理清单中的所有主机,这里的”all:”就是这个含义。

第二行开头使用一个空格作为缩进,使用hosts关键字,表示hosts属于all的下一级,我们可以这样理解,all是默认的一个组,这个组是最大的一个组,当我们需要在组中定义受管主机时,就需要使用到hosts关键字,当我们进行自定义分组时,也需要使用hosts关键字,每个分组指明自己组内的受管主机时,都要使用到hosts关键字。

注意,在YAML的语法中,只能使用空格作为缩进,不能使用tab,否则语法上会报错,如果你习惯使用vim编辑文件,同时你又习惯使用tab作为缩进,那么你可以将ansible主机上的vim进行设置,默认将tab转化为空格,这样就能兼容你的使用习惯了。

第三行开头使用两个空格作为缩进,然后指明了主机2的IP地址,没错,主机2的IP地址就是hosts元素下一级的元素

第四行开头使用两个空格作为缩进,然后指明了主机3的IP地址,你一定想明白了,主机2和主机3的层级是相同的,它们是平级的,因为它们的左侧缩进是对齐的。

测试:

ansible all -m ping
ansible 172.25.1.2 -m ping
ansible 172.25.1.3 -m ping

在这里插入图片描述

在这里插入图片描述

3. YAML配置示例二

先看一个INI风格的配置

172.25.1.2

[test1]
172.25.1.3

[test2]
172.25.1.4

上述配置表示当前清单中有3台受管主机,主机2不属于任何组,主机3属于test1组,主机4属于test2组

使用YAML语法进行同等效果的配置如下
(注意,为了使缩进显得更加明显,此处每次缩进使用两个空格)

all: 
  hosts:
    172.25.1.2
  children:
    test1:
      hosts:
        172.25.1.3
    test2:
      hosts:
        172.25.1.4

在这里插入图片描述
从上例可以看出,当直接在清单中创建组时,需要在all关键字内使用children关键字,而定义每个组时,有必须使用hosts关键字,指明组内的主机

测试:

ansible test1 -m ping
ansible test2 -m ping
ansible 172.25.1.2 -m ping

在这里插入图片描述

4. YAML配置示例三

有了上面的基础,我们来看一下当组中嵌套组时,使用YAML语法应该怎样描写

仍然先写出INI风格的示例以作对比,如下:

[proA]
172.25.1.2

[proB]
172.25.1.3

[pro:children]
proA
proB

对应YAML格式的配置如下

all: 
  children:
    pro:
      children:
        proA:
          hosts:
            172.25.1.2:
        proB:
          hosts:
            172.25.1.3:

在这里插入图片描述
上述配置表示,pro组有两个子组,分别为proA组和proB组,而这两个组分别有自己组内的主机。

测试:

ansible pro -m ping
ansible proA -m ping
ansible proB -m ping

在这里插入图片描述

在这里插入图片描述

细心如你,一定已经发现,当我们使用YAML语法配置清单时,无非是使用hosts、children等关键字与我们的自定义名称进行排列组合罢了。

5. YAML配置示例四

前文中,我们还介绍了使用别名的方式配置受管主机,INI格式的示例如下:

172.25.1.2
server3 ansible_host=172.25.1.3
172.25.1.4

在这里插入图片描述

测试:

ansible server3 -m ping
ansible 172.25.1.2 -m ping
ansible 172.25.1.4 -m ping

在这里插入图片描述

同等效果的YAML语法配置如下:

all:
  hosts:
    172.25.1.2:
    server3:
      ansible_host: 172.25.1.3
    172.25.1.4:

在这里插入图片描述

注意:上图中标注的”空格”不可省,这是YAML的语法,省略空格后会报

测试:

ansible server3 -m ping
ansible 172.25.1.2 -m ping
ansible 172.25.1.4 -m ping

在这里插入图片描述

你可能已经习惯使用INI的语法编辑清单,或者你对YAML并不熟悉,于是你准备放弃学习YAML语法,这样并不可行,因为之后我们会介绍怎样编写ansible的剧本,编写ansible剧本时,只能使用YAML语法,所以,不要放弃YAML,当然,我们也不用过于深究YAML的语法,我们只要记住一些套路(固定格式),就可以编写ansible剧本了,所以不要着急,船到桥头自然直,到时候你自然会掌握这些语法的。

发布了190 篇原创文章 · 获赞 27 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45775963/article/details/105068510
今日推荐