Types Yaml列表和对象的差异及其用法

Types Yaml列表和对象的差异及其用法,types,yaml,Types,Yaml,对不起,这是一个基本类型的问题。刚从YAML开始。。 -list:和object:之间的区别是什么 要验证,两个YAML都是有效的。即使删除了所有的“-”号。 谢谢 首先,很明显你在写Ansible,你真正想要的版本是第一个版本。从Ansible的角度来看,第二个版本是无效的(即使它的YAML语法有效) 现在,我将解释YAML语法是如何工作的 让我们通过参考 : 数据结构有无数种风格,但它们都可以充分利用 用三个基本原语表示:映射 (哈希/字典)、序列(数组/列表)和标量 (字符串/数字)

对不起,这是一个基本类型的问题。刚从YAML开始。。 -list:和object:之间的区别是什么

要验证,两个YAML都是有效的。即使删除了所有的“-”号。 谢谢



首先,很明显你在写Ansible,你真正想要的版本是第一个版本。从Ansible的角度来看,第二个版本是无效的(即使它的YAML语法有效)

现在,我将解释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有三个核心结构:

  • 标量,最原始的单位
  • 序列,本质上是列表或数组
  • 映射,它们是键值对
在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