YAML 语法

YAML 语法

这个页面提供一个正确的 YAML 语法的基本概述, 它被用来描述一个 playbooks(我们的配置管理语言).

我们使用 YAML 是因为它像 XML 或 JSON 是一种利于人们读写的数据格式. 此外在大多数变成语言中有使用 YAML 的库.

你可能希望读 Playbooks 实践中如何使用的.

基本的 YAML

对于 Ansible, 每一个 YAML 文件都是从一个列表开始. 列表中的每一项都是一个键值对, 通常它们被称为一个 “哈希” 或 “字典”. 所以, 我们需要知道如何在 YAML 中编写列表和字典.

YAML 还有一个小的怪癖. 所有的 YAML 文件(无论和 Ansible 有没有关系)开始行都应该是 ---. 这是 YAML 格式的一部分, 表明一个文件的开始.

列表中的所有成员都开始于相同的缩进级别, 并且使用一个 "- " 作为开头(一个横杠和一个空格):

---
# 一个美味水果的列表
- Apple
- Orange
- Strawberry
- Mango

一个字典是由一个简单的 键:  的形式组成(这个冒号后面必须是一个空格):

---
# 一位职工的记录
name: Example Developer
job: Developer
skill: Elite

字典也可以使用缩进形式来表示, 如果你喜欢这样的话:

---
# 一位职工的记录
{name: Example Developer, job: Developer, skill: Elite}

Ansible并不是太多的使用这种格式, 但是你可以通过以下格式来指定一个布尔值(true/fase):

---
create_key: yes
needs_agent: no
knows_oop: True
likes_emacs: TRUE
uses_cvs: false

让我们把目前所学到的 YAML 例子组合在一起. 这些在 Ansible 中什么也干不了, 但这些格式将会给你感觉:

---
# 一位职工记录
name: Example Developer
job: Developer
skill: Elite
employed: True
foods:
    - Apple
    - Orange
    - Strawberry
    - Mango
languages:
    ruby: Elite
    python: Elite
    dotnet: Lame

这就是你开始编写 Ansible playbooks 所需要知道的所有 YAML 语法.

Gotchas

尽管 YAML 通常是友好的, 但是下面将会导致一个 YAML 语法错误:

foo: somebody said I should put a colon here: so I did

你需要使用引号来包裹任何包含冒号的哈希值, 像这样:

foo: "somebody said I should put a colon here: so I did"

然后这个冒号将会被结尾.

此外, Ansible 使用 “{{ var }}” 来引用变量. 如果一个值以 “{” 开头, YAML 将认为它是一个字典, 所以我们必须引用它, 像这样:

foo: "{{ variable }}"

See also

Playbooks
Learn what playbooks can do and how to write/run them.
YAMLLint
YAML Lint (online) helps you debug YAML syntax if you are having problems
Github examples directory
Complete playbook files from the github project source
Mailing List
Questions? Help? Ideas? Stop by the list on Google Groups
irc.freenode.net

#ansible IRC chat channel


来自: http://www.ansible.com.cn/docs/YAMLSyntax.html

https://www.jianshu.com/p/e091df2ff1c4 

### YAML 语法简介 YAML 是一种人类可读的数据序列化标准,常用于配置文件以及在应用程序之间传递数据。它的设计目标是使数据易于阅读和编写,同时保持与其他编程语言的良好兼容性。 以下是关于 YAML 的一些核心概念: #### 基本语法格式要求 YAML 文件通常以 `.yml` 或 `.yaml` 扩展名结尾。其基本语法规则包括缩进表示层次结构、使用连字符 `-` 表示列表项等[^2]。 #### 数据类型支持 YAML 支持多种数据类型,具体如下: - **字符串**:不需要引号包裹,但如果包含特殊字符,则需要用单引号 `'` 或双引号 `"` 包裹。 - **数值**:可以表示整数、浮点数等[^2]。 - **布尔值**:通过 `true/false` 或 `yes/no` 来表达逻辑值[^2]。 - **空值**:可以用 `null` 或 `~` 表示。 - **列表 (Array)**:由连字符 `-` 开头的行组成。 - **对象/字典 (Map)**:键值对形式,其中键和值用冒号 `:` 分隔[^2]。 #### 示例代码展示 下面是一个完整的 Python 脚本,演示如何生成一个包含嵌套结构的 YAML 文件: ```python import yaml data = { 'person': { 'name': 'Alice Smith', 'age': 28, 'married': False, 'children': [], 'pets': None, 'cars': [ {'model': 'Tesla Model S', 'mpg': 30.1}, {'model': 'Ford Mustang', 'mpg': 15.8} ] } } filename = 'example.yaml' with open(filename, 'w') as file: yaml.dump(data, file, allow_unicode=True) print(f'YAML 文件 {filename} 已成功创建并写入数据。') ``` 此脚本定义了一个复杂的嵌套字典,并将其保存到名为 `example.yaml` 的文件中[^1]。 #### YAML 配置示例 以下是一些常见的 YAML 配置实例及其解释: ##### 简单键值对 ```yaml key: value number: 42 boolean: true null_value: null ``` ##### 列表 ```yaml fruits: - Apple - Banana - Cherry ``` ##### 嵌套结构 ```yaml user: name: John Doe age: 30 address: city: New York zip_code: 10001 ``` ##### 锚点与引用 为了减少重复,YAML 提供了锚点 (`&`) 和别名 (`*`) 功能来实现节点重用: ```yaml defaults: &default_settings logging_level: info timeout: 30 service_a: <<: *default_settings port: 8080 service_b: <<: *default_settings port: 9090 ``` 在此例子中,两个服务共享相同的默认设置,但各自拥有独立端口配置。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值