Ansible进阶-Playbook

1.1 playbook介绍playbook 剧本是由一个或多个"play"组成的列表play的主要功能在于将预定义的一组主机,装扮成事先通过ansible中的task定义好的角色。Task实际是调用ansible的一个module,将多个play组织在一个playbook中,即可以让它们联合起来,按事先编排的机制执行预定义的动作Playbook 文件是采用YAML语言编写的1.2 YAML 语言1.2.1 YAML语言介绍YAML:YAML Ain’t Markup Language,
摘要由CSDN通过智能技术生成

1.1 playbook介绍

在这里插入图片描述

  • playbook 剧本是由一个或多个"play"组成的列表
  • play的主要功能在于将预定义的一组主机,装扮成事先通过ansible中的task定义好的角色。Task实际是调用ansible的一个module,将多个play组织在一个playbook中,即可以让它们联合起来,按事先编排的机制执行预定义的动作
  • Playbook 文件是采用YAML语言编写的

1.2 YAML 语言

1.2.1 YAML语言介绍

YAML:YAML Ain’t Markup Language,即YAML不是标记语言。不过,在开发的这种语言时,YAML的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)

YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者,目前很多最新的软件比较流行采用此格式的文件存放配置信息,如:ubuntu,anisble,docker,kubernetes等

YAML 官方网站:http://www.yaml.org

ansible 官网: https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html

1.2.2 YAML语言特性

YAML的可读性好
YAML和脚本语言的交互性好
YAML使用实现语言的数据类型
YAML有一个一致的信息模型
YAML易于实现
YAML可以基于流来处理
YAML表达能力强,扩展性好

1.2.3 YAML语法简介

  • 在单一文件在单一文件第一行,用连续三个连字号"-" 开始第一行,用连续三个连字号"-" 开始
  • 次行开始正常写Playbook的内容,一般建议写明该Playbook的功能使用#号注释代码
  • 缩进必须是统一的,不能空格和tab混用
  • 缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的
  • YAML文件内容是区别大小写的,key/value的值均需大小写敏感
  • 多个key/value可同行写也可换行写,同行使用,分隔 key后面冒号要加一个空格 比如: key: value value可是个字符串,也可是另一个列表
  • YAML文件扩展名通常为 yml 或 yaml

1.2.4 支持的数据类型

YAML 支持以下常用几种数据类型:

  • 标量:单个的、不可再分的值
  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

1.2.4.1 scalar 标量

key对应value

name:zeng
age:18

使用缩进的方式

name:
  zeng
age:
  18

标量是最基本的,不可再分的值,包括:

字符串
布尔值
整数
浮点数
Null
时间
日期

1.2.4.2 Dictionary 字典

字典由多个key与value构成,key和value之间用 :分隔, 并且 : 后面有一个空格,所有k/v可以放在一行,或者每个 k/v 分别放在不同行

格式

account: {
    name: zeng, age: 18 }

使用缩进方式

account:
  name: zeng
  age: 18

范例:

#不同行
# An employee record 
name: Example Developer 
job: Developer
skill: Elite(社会精英)


#同一行,也可以将key:value放置于{}中进行表示,用,分隔多个key:value 
# An employee record
{
   name: "Example Developer", job: "Developer", skill: "Elite"}

1.2.4.3 List列表

列表由多个元素组成,每个元素放在不同行,且元素前均使用"-"打头,并且 - 后有一个空格, 或者将所有元素用 [ ] 括起来放在同一行

格式:

course: [ linux, golang, python ]

也可以写成以 - 开头的多行:

course:
  - linux 
  - golang
  - python

数据里面也可以包含字典:

course:
  - linux: manjaro 
  - golang: gin
  - python: django

范例:

#不同行,行以-开头,后面有一个空格
# A list of tasty fruits
- Apple 
- Orange
- Strawberry 
- Mango

#同一行
[Apple,Orange,Strawberry,Mango]

范例:YAML 表示一个家庭

name: John Smith 
age: 41
gender: Male
spouse: {
    name: Jane Smith, age: 37, gender: Female } # 写在一行里
  name: Jane Smith  #也可以写成多行age: 37
  gender: Female
children: [ {
   name: Jimmy Smith,age: 17, gender: Male}, {
   name: Jenny Smith, age:
13, gender: Female}, {
   name: hao Smith, age: 20, gender: Male } ] #写在一行
  - name: Jimmy Smith   #写在多行,更为推荐的写法
    age: 17
    gender: Male
  - {
   name: Jenny Smith, age: 13, gender: Female} 
  - {
   name: hao Smith, age: 20, gender: Male }

1.2.4.4 三种常见的数据格式

XML:Extensible Markup Language,可扩展标记语言,可用于数据交换和配置
JSON:JavaScript Object Notation, JavaScript 对象表记法,主要用来数据交换或配置,不支持注释
YAML:YAML Ain’t Markup Language YAML 不是一种标记语言, 主要用来配置,大小写敏感,不支持tab
在这里插入图片描述

1.3 Playbook核心组件

一个playbook 中由多个组件组成,其中所用到的常见组件类型如下:

  • Hosts:执行的远程主机列表
  • Tasks:任务集,由多个task的元素组成的列表实现,每个task是一个字典,一个完整的代码块功能需最少元素需包括 name 和 task,一个name只能包括一个task
  • Variables :内置变量或自定义变量在playbook中调用
  • Templates模板:可替换模板文件中的变量并实现一些简单逻辑的文件
  • Handlers 和 notify 结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
  • tags 标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断

1.3.1 hosts组件

Hosts:playbook中的每一个play的目的都是为了让特定主机以某个指定的用户身份执行任务。hosts用于指定要执行指定任务的主机,须事先定义在主机清单中

[webservers]
10.0.0.20
[dbservers]
10.0.0.30
10.0.0.40 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'

案例:

- hosts: webservers

1.3.2 remote_user 组件

remote_user: 可用于Host和task中。也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务;此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户

- 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值