Types Yaml列表和对象的差异及其用法
对不起,这是一个基本类型的问题。刚从YAML开始。。 -list:和object:之间的区别是什么 要验证,两个YAML都是有效的。即使删除了所有的“-”号。 谢谢Types Yaml列表和对象的差异及其用法,types,yaml,Types,Yaml,对不起,这是一个基本类型的问题。刚从YAML开始。。 -list:和object:之间的区别是什么 要验证,两个YAML都是有效的。即使删除了所有的“-”号。 谢谢 首先,很明显你在写Ansible,你真正想要的版本是第一个版本。从Ansible的角度来看,第二个版本是无效的(即使它的YAML语法有效) 现在,我将解释YAML语法是如何工作的 让我们通过参考 : 数据结构有无数种风格,但它们都可以充分利用 用三个基本原语表示:映射 (哈希/字典)、序列(数组/列表)和标量 (字符串/数字)
首先,很明显你在写Ansible,你真正想要的版本是第一个版本。从Ansible的角度来看,第二个版本是无效的(即使它的YAML语法有效) 现在,我将解释YAML语法是如何工作的 让我们通过参考 :
数据结构有无数种风格,但它们都可以充分利用 用三个基本原语表示:映射 (哈希/字典)、序列(数组/列表)和标量 (字符串/数字)
YAML节点表示单个本机数据结构。这样的节点具有 三种内容之一:标量、序列或映射 因此,本质上,YAML有三个核心结构:
- 标量,最原始的单位
- 序列,本质上是列表或数组
- 映射,它们是键值对
-
时,表示接下来发生的任何事情都是序列(列表)的一部分。当你使用:
时,你说的是左边的东西是一个“键”,右边的东西是一个“值”(它们一起构成一个“键值对”)
但是事情比这更复杂,因为当然,你可以嵌套这些结构
让我们举一个简单的例子:
---
my_shopping_list:
- apples
- eggs
- oranges
friends_shopping_list:
- chocolate
- beer
- bacon
在本例中,我们有一个映射-有两个键(my_shopping_list
和friends_shopping_list
),每个键都有一个对应的值。在本例中,值是序列(列表)——两个朋友的购物列表
在YAML中,您还可以使用许多编程语言中更常见的数组表示法编写序列。因此,以下内容等同于上述内容:
---
my_shopping_list:
[apples, eggs, oranges]
friends_shopping_list:
[chocolate, beer, bacon]
事情也可以反过来——我们可以有一个由映射组成的序列。事实上,这正是你的剧本例子。让我们深入研究一下
---
- name: Add Keys to Hosts
hosts: all
tasks:
- name: Install Key
authorized_key:
user: root
state: present
key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
在Ansible中,剧本由一系列剧本组成。在您的示例中,有一个剧本(您在这里看到的全部内容构成一个剧本)
在一个游戏中,我们有一个映射(键值对)。在本例中,这些是:
钥匙
价值
名称
“向主机添加密钥”(标量)
主人
“全部”(标量)
任务
YAML序列
首先,很明显你在写Ansible,你真正想要的版本是第一个版本。从Ansible的角度来看,第二个版本是无效的(即使它的YAML语法有效) 现在,我将解释YAML语法是如何工作的 让我们通过参考 :
数据结构有无数种风格,但它们都可以充分利用 用三个基本原语表示:映射 (哈希/字典)、序列(数组/列表)和标量 (字符串/数字)
YAML节点表示单个本机数据结构。这样的节点具有 三种内容之一:标量、序列或映射 因此,本质上,YAML有三个核心结构:
- 标量,最原始的单位
- 序列,本质上是列表或数组
- 映射,它们是键值对
-
时,表示接下来发生的任何事情都是序列(列表)的一部分。当你使用:
时,你说的是左边的东西是一个“键”,右边的东西是一个“值”(它们一起构成一个“键值对”)
但是事情比这更复杂,因为当然,你可以嵌套这些结构
让我们举一个简单的例子:
---
my_shopping_list:
- apples
- eggs
- oranges
friends_shopping_list:
- chocolate
- beer
- bacon
在本例中,我们有一个映射-有两个键(my_shopping_list
和friends_shopping_list
),每个键都有一个对应的值。在本例中,值是序列(列表)——两个朋友的购物列表
在YAML中,您还可以使用许多编程语言中更常见的数组表示法编写序列。因此,以下内容等同于上述内容:
---
my_shopping_list:
[apples, eggs, oranges]
friends_shopping_list:
[chocolate, beer, bacon]
事情也可以反过来——我们可以有一个由映射组成的序列。事实上,这正是你的剧本例子。让我们深入研究一下
---
- name: Add Keys to Hosts
hosts: all
tasks:
- name: Install Key
authorized_key:
user: root
state: present
key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
在Ansible中,剧本由一系列剧本组成。在您的示例中,有一个剧本(您在这里看到的全部内容构成一个剧本)
在一个游戏中,我们有一个映射(键值对)。在本例中,这些是:
钥匙
价值
名称
“向主机添加密钥”(标量)
主人
“全部”(标量)
任务
YAML序列
谢谢科斯塔帕拉斯!
我的问题不是关于ansible,而是关于YAML。为我的语法道歉。我不是一个开发者。
刚开始使用Ansible并试图将控制节点的ssh密钥放入一些主机,但我作弊了。。。用于{200..250}中的i的;执行ssh-keyscan-h192.168.101.$i>>~/.ssh/known_hosts;在运行Ansible剧本之前完成。我知道这条特别的一行只是附加的,它错过了检查和更新已知的\u主机
,记录和总结我应该能够通过Ansible轻松实现的结果的代码。。如果我知道如何使用Ansible
通过ansible all-m命令-a“df-h”测试
第二个例子很抱歉,我知道它在Ansible中不起作用。。这只是为了传达语法
让Ansible走开,回到YAML问题
测试后,我对“列表”的理解是一组条目/项目(条目是键/值对或简单值)。或“列表”中的单个项目。分组也可以通过键:值对的嵌套来实现
何时使用“列表”取决于应用程序
Key1:
- key1: XX
key2: XX
key3: XX
- key1: xx # OK, same key name
key2: xx
key2: XX # Not OK!, same as key name above