types - Yaml列表和对象的区别,以及它们的用法
问题描述
对不起,一个基本类型的问题。刚开始使用 YAML .. -list: 和 object: 有什么区别?
到https://jsonformatter.org/yaml-validator,两个 YAML 都经过验证。即使所有的“-”都被删除了。谢谢!
---
- 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') }}"
---
- 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') }}"
name2: Install Key
authorized_keys:
- name: test
- name: Apple
解决方案
谢谢哥斯达黎加!我的问题不是关于 ansible,而是关于 YAML。为我的语法道歉。而且我不是开发人员。刚开始使用 Ansible 并试图将控制节点的 ssh 密钥导入某些主机,但我作弊了……for i in {200..250}; do ssh-keyscan -H 192.168.101.$i >> ~/.ssh/known_hosts ; done
在运行该 Ansible 剧本之前使用过。我知道这个特别的一行只是附加,它错过了检查和更新known_hosts
、记录和总结结果的代码,我应该能够通过 Ansible 轻松实现。如果我知道如何使用 Ansible。
通过测试ansible all -m command -a "df -h"
对第二个示例感到抱歉,我知道它在 Ansible 中不起作用。它只是为了传达语法。
解决了 Ansible 问题,回到 YAML 问题。
经过测试,我对“列表”的理解是一组条目/项目(条目是键/值对或简单值)。或“列表”中的单个项目。分组也可以通过键值对的嵌套来实现。
何时使用“列表”取决于解析内容的应用程序/软件。例子; ansible 和容器中的任务键名Kubernetes 需要包含“列表”。下一行中的“keyname:”后面必须是“-”。
差异(至少在 YAML 中);“列表”可以包含具有相同键名的项目。并且可能在“列表”中存在项目的顺序或位置。键名不允许重复键名:不在“列表”中的值对。“列表”是可以重复的项目的索引顺序,而同一级别(缩进)的键:值对就像文件夹中的文件,没有重复的文件名。使用嵌套的键:值对创建“列表”是可能的,但是创建文件夹 1、文件夹 2 等很麻烦。以分隔相同的文件名文件,并且不容易在其间插入另一个项目。可能的“列表”内置了自动位置索引。
下一个; Key:value 可以包含其他 key:value 或“list”,“list”也是如此。但不能在同一级别中混合使用“key:value”和“list”。例子; 使用 2 个 key:value 创建 key1 和 1 个带有 2 个项目(key4 和 [key5,key6])的“列表”。
Key1:
key2: Covid
key3: CFR
- key4: systemctl
- key5: motd
key6: dig
另一个是;
Key1:
- key1: XX
key2: XX
key3: XX
- key1: xx # OK, same key name
key2: xx
key2: XX # Not OK!, same as key name above
我使用https://onlineyamltools.com/validate-yaml进行测试,但https://codebeautify.org/yaml-validator提供了重复键名的差异结果。我认为更严格的那个是“更多”正确的。
不确定我错过了任何一点或/并且存在误解。这对开发人员来说可能是非常清楚的。
推荐阅读
- python - Selenium python 无法检测到弹出窗口?
- php - 检查预约空档的可用性
- sql - 我怎样才能最好地在我的表中创建员工和认证记录?
- discord.js - 嘿,如何向我的不和谐机器人添加切换系统?[discord.js]
- flutter - 没有名为“nullOk”的命名参数。上下文!=空?Localizations.localeOf(context, nullOk: true) : null,
- java - 如何使用 SwissEPH 获取日月经度?
- spring-boot - 删除十进制 Java 变量
- javascript - 在 JavaScript 中使用 Promise 和 Async/Await
- python - 在 Python 中,从函数内部更改函数外部对象的操作原理是什么?
- html - 如何在我的 ASP.NET Core MVC 项目中使用 Selected2 搜索栏?