gpt4 book ai didi

ansible - 无法将ansible fact设置为整数

转载 作者:行者123 更新时间:2023-12-05 02:39:28 25 4
gpt4 key购买 nike

我正在尝试提取主要发行版版本(ansible_facts 以字符串形式保存)并将其存储为整数,以便以后 < 或 > 与整数进行比较。当我这样做时:

set_fact:
distromajor: "{{ ansible_facts['distribution_major_version'] | int }}"

我发现 distromajor 持有“7”而不是 7。所以后来的比较失败了。事实上,我能让它工作的唯一方法是像这样比较:

(distromajor|int >=6) and (distromajor|int <= 8)

这是预期的行为吗?为什么我不能将发行版主版本保存为 int?

最接近的 SO question 没有解释为什么后来的整数比较在比较时没有将 distromajor 变量重新转换为 int 就失败了。

最佳答案

问:这是预期的行为吗?

答:是的。这是 Ansible 中的预期行为。


问:为什么我不能将发行版主版本保存为 int?

答:Ansible 决定你不能(待办事项:需要引用源代码)。在 YAML ,共有三个基本原语:

  • 映射(哈希/字典)
  • 序列(数组/列表)
  • 标量(字符串/数字)

如您所见,标量既是字符串又是数字。但是,出于某种我不知道的原因,Ansible 决定任何 "{{ scalar }}" 表达式只能返回 stringboolean。例如

    - set_fact:
distromajor: "{{ ansible_facts['distribution_major_version']|int }}"
- debug:
var: distromajor
- debug:
msg: "{{ distromajor|type_debug }}"

尽管显式转换为整数,但给出一个字符串,正如您已经发现的那样

  distromajor: '20'
msg: AnsibleUnsafeText

关于ansible - 无法将ansible fact设置为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69109062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com