【问题标题】:Ansible - Wrapper of python interpreterAnsible - python 解释器的包装器
【发布时间】:2019-06-17 07:47:49
【问题描述】:

Ansible 使用 YAML 语法主要有键值对,每个值都可以是

一个简单的值(数字或字符串)

一个列表

键值对(嵌套)


锚定一个值,YAML 中的类型转换只是一个预处理选项。


1)

从数据结构方面,

YAML 语法是字典的字典吗?

2)

对于命令:ansible -m shell 'hostname' allansible 是 python 解释器的包装器吗?采用多个命令行选项...

【问题讨论】:

    标签: python dictionary yaml


    【解决方案1】:

    从数据结构方面,

    YAML 语法是字典的字典吗?

    没有。 YAML 语法对有向图进行建模。您最初对 YAML 的假设是错误的。在 YAML 中,值是以下三种情况之一:

    • 一个标量(数字、字符串、日期……)
    • 一个序列(值列表)
    • 映射(键和值都是任意类型值的键值对列表)

    由于任何非标量值都可以包含其他非标量值,因此 YAML 可以表示任意深度的树 - 因此它不一定是字典字典。

    现在,YAML 还允许在任何值上使用锚点,并在以后通过别名引用该值:

    anchored value: &anchor My value
    alias: *anchor
    

    这里,*alias 引用锚定标量值My value。这可以用来定义循环图:

    --- &root   # this annotates the root sequence;
    - one
    - two       # simple sequence items
    - three
    - *root     # reference to the sequence, meaning that the sequence contains itself
    

    请注意,序列和映射通常都以 YAML 语法隐式启动。如果孩子是键/值对,它是一个映射(第一个例子);如果子项是列表项,则它是一个序列(第二个示例)。 --- 开始文档,通常被省略。

    对于命令:ansible -m shell 'hostname' all,ansible 是 python 解释器的包装器吗?采用多个命令行选项...

    请参阅man page of the ansible command。您可能正在寻找-a ARGS 选项。我不确定你会认为 Python 解释器的 包装器 是什么,你可能想澄清你真正想要做什么。一般来说,答案是

    【讨论】:

    • 可以在将 yaml 数据存储到内存之前对锚点进行预处理,以供进一步使用。如果消费者在 yaml 中预处理锚定设施......那么就不需要将 YAML 文件内容存储为有向图......不是吗?
    • @overexchange YAML 是一种序列化格式;它被设计为映射到本机数据类型,并且 constructor(创建本机值的实用程序的规范名称)可以对数据进行各种更改。例如,PyYAML 无法正确映射锚定/非锚定数字,因为 Python 为小数字预分配空间,并且 总是 将这些对象用于这些小数值。最好反过来想:原生数据结构可能包含循环结构,因此 YAML 支持对它们进行序列化。
    • 只是想知道...将 YAML 与 Ansible 结合使用,不需要目标主机上的代理,除了 ssh 服务器... ssh 服务器(在目标机器上)如何能够理解由发送的 YAML 序列化格式来自控制服务器的ansible?
    • 我对 Ansible 的工作原理没有深入了解,但我希望它在本地解析 YAML,然后将命令发送到目标。 SSH 服务器无法理解 YAML;你当然需要一个工具来在目标上解析它。
    • 正如我所说,Ansible 需要解析主机上的 YAML 才能知道你想在目标机器上做什么。然后它使用它的模块在目标机器上做任何你想让它做的事情,但那是加载 YAML 之后,所以目标不需要再次解析 YAML。我也很确定,对于像创建用户这样的任务,Ansible 不会传输任何代码,而只是通过 ssh 在目标上执行useradd。一般来说,您的问题并不适合 SO 的问答形式,您可能想在 Ansible mailing lists 上提问。
    猜你喜欢
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2018-11-05
    • 2012-05-12
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    相关资源
    最近更新 更多