自动化运维(三十一)Ansible之 YAML 详细介绍

YAML(YAML Ain't Markup Language)是一种便于人类阅读的数据序列化标准,常用于配置文件、数据交换等场景。它以其简洁和易于理解的语法而受到开发者的青睐。YAML 设计的目标是易于人类阅读和支持各种编程语言的数据结构。

一、YAML 基础

1. 数据结构

YAML 主要支持三种数据结构:

  • 标量(Scalars):单个的、不可分的值,比如字符串或数字。
  • 序列(Sequences):一组按顺序排列的值,通常表示为列表或数组。
  • 映射(Mappings):键值对的集合,通常表示为哈希表、字典或对象。
2. 语法
  • 缩进:YAML 使用缩进来表示结构层次,类似于 Python。缩进空格的数量不是固定的,但是必须一致。
  • 列表 :使用短横线 - 开头表示一个列表项。
  • 字典 :使用冒号 : 后跟一个空格来分隔键和值。
  • 多行字符串 :可以用 |> 来表示,| 保留换行符,> 折叠换行符。
  • 注释 :使用 # 开头的行被视为注释。
3. 示例
复制代码
# 示例 YAML 配置文件
person:
  name: John Doe
  age: 30
  children:
    - Alice
    - Bob
  address:
    street: 123 Elm Street
    city: Somewhere
    zip: 12345

# 列表示例
fruits:
  - Apple
  - Banana
  - Cherry

# 多行字符串示例
description: |
  This is a long description
  that spans multiple lines in the YAML file.
  It includes all line breaks.

二、YAML 的高级特性

1. 锚点和别名

YAML 允许定义一个锚点(使用 &)并在后续使用别名(使用 *)引用,这在配置文件中避免重复非常有用。

复制代码
defaults: &defaults
  adapter: postgres
  host: localhost

development:
  <<: *defaults
  database: dev_db

test:
  <<: *defaults
  database: test_db
2. 合并键

使用 << 符号可以合并两个字典的内容,这在使用共通配置时非常方便。

复制代码
base: &base
  name: Everyone has same name

foo:
  <<: *base
  age: 10

bar:
  <<: *base
  age: 20
3. 复杂的数据类型

YAML 支持表示更复杂的数据类型,如日期、时间、布尔值和 null 值。

三、YAML 使用注意事项

  • 缩进问题:缩进必须使用空格而非制表符(tab),不同编辑器中的默认设置可能不同。
  • 数据类型转换:YAML 自动将数据转换为相应的数据类型,比如将 "123" 解析为整数而非字符串,有时这可能不是预期的行为。

四、使用场景

YAML 常用于各种软件和应用的配置,如 Kubernetes 的配置文件、CI/CD 系统(如 Travis CI、GitLab CI、Jenkins)的配置文件等。它的易读性和简洁性使其成为理想的配置语言。

通过以上详细介绍,可以看出 YAML 是一种灵活且功能丰富的数据序列化语言,非常适合用于现代软件开发和运维任务中的配置管理。

相关推荐
.柒宇.2 小时前
运维常见面试题_07_配置管理与监控(Ansible · Prometheus · Alertmanager)· 容器编排(Kubernetes)
运维·k8s·ansible·prometheus
相顾若初见2 小时前
Ansible部署k8s
容器·kubernetes·ansible
wzq11_66612 小时前
ansible部署项目——基于tidb数据库安装zabbix_server
ansible·zabbix·tidb
吃不吃早饭1 天前
RHEL9 搭建 Harbor 私有仓库与 Ansible 自动化部署 Kubernetes 运行环境完整实践
kubernetes·自动化·ansible
wzq11_6661 天前
Ansible自动部署Redis——六步自动安装Redis数据库
ansible
mohesashou1 天前
红帽linux的K8S部署
linux·kubernetes·ansible
lxw20230271162 天前
k8s安装部署(利用ansible)
linux·kubernetes·ansible
B1538932 天前
Day 21-Ansible 进阶与 Zabbix TiDB 迁移学习记录
ansible·zabbix·tidb
酷可达拉斯2 天前
自动化运维-Ansible Role综合应用案例-基于LNMP部署wordpress
linux·运维·服务器·自动化·ansible
NJCloud5 天前
Ansible(三)——Zabbix 监控系统部署与敏感信息加密
linux·运维·chrome·信息可视化·ansible·zabbix