'用户' 是 Ansible 上的本机变量吗?

'用户' 是 Ansible 上的本机变量吗?
users:
  - name: hellouser
    password: pw
    accessToken: ""
    readonly: false
  - name: hellouser2
    password: pw2
    accessToken: ""
    readonly: true

结果是:

fatal: [IP]: FAILED! => {"changed": false, "failed": true, "msg":
"AnsibleUndefinedVariable: 'unicode object' has no attribute 'name'"}

何时users更改为users2

users2:
  - name: hellouser
    password: pw
    accessToken: ""
    readonly: false
  - name: hellouser2
    password: pw2
    accessToken: ""
    readonly: true

ansible 运行成功。

讨论

  • 该问题可能是由于本机变量和自定义变量之间的冲突引起的,例如,由于自定义变量更改为,users此问题不再发生。然而,在usersusers2users文档What Makes A Valid Variable Name

添加、附加、as_integer_ratio、bit_length、大写、中心、清除、共轭、复制、计数、解码、分母、差异、difference_update、丢弃、编码、endswith、expandtabs、扩展、查找、格式化、fromhex、fromkeys、获取、has_key、hex、imag、索引、插入、交集、intersection_update、isalnum、isalpha、isdecimal、isdigit、isdisjoint、is_integer、islower、isnumeric、isspace、issubset、issuperset、istitle、isupper、项目、iteritems、iterkeys、itervalues、连接、键、ljust、lower、lstrip、分子、分区、pop、popitem、实数、删除、替换、反转、rfind、rindex、rjust、rpartition、rsplit、rstrip、setdefault、排序、拆分、splitlines、startswith、strip、swapcase、symmetric_difference, symmetric_difference_update、标题、翻译、联合、更新、上限、值、viewitems、viewkeys、viewvalues、zfill。

  • 在 Puppet 中,可以定义全局变量和局部变量,这样本机变量和自定义变量之间就不会发生冲突。根据本文档可以在 Ansible 中定义不同的变量类型:
  • 全局:由配置、环境变量和命令行设置
  • 剧本:每个剧本及其包含的结构、变量条目、include_vars、角色默认值和变量。
  • 主机:与主机直接相关的变量,如库存、事实或注册任务输出

问题

  1. 如何防止 Ansible 中本机变量和自定义变量之间发生冲突?
  2. Ansible 中是否有本机变量列表?
  3. Ansible 中是否有像 Puppet 一样的全局变量和局部变量?

答案1

如果没有引发错误的任务,"AnsibleUndefinedVariable: 'unicode object' has no attribute 'name'"很难判断这里出了什么问题。我无法重现此错误,所以我猜这是您使用的模块中的一个错误。

除了已经引用的列表known public attributes我不知道还有什么其他规则。即使使用,在known public attributes我的测试中也没有导致任何错误。

Ansible 有以下概念魔法变量这些基本上只是模块收集的事实。您可以通过针对主机运行模块setup来获取列表。magic variablessetup

Ansible 中没有globallocal变量,就 而言types。Ansible 中的变量有一个scope。变量的范围取决于它设置的位置。看看变量优先级的文档

相关内容