无法将ansible fact设置为整数
Can't set ansible fact as integer
我正在尝试提取主要发行版(ansible_facts 以字符串形式保存)并将其存储为整数,以便以后与整数进行 < 或 > 比较。当我这样做时:
set_fact:
distromajor: "{{ ansible_facts['distribution_major_version'] | int }}"
我发现 distromajor 持有“7”而不是 7。所以后来的比较失败了。事实上,我唯一能让它工作的方法就是这样比较:
(distromajor|int >=6) and (distromajor|int <= 8)
这是预期的行为吗?为什么我不能将发行版主版本保存为 int?
最接近的 没有解释为什么在比较时没有将 distromajor 变量重新转换为 int 的情况下后来的整数比较失败。
问:"这是预期的行为吗?"
答:是的。这是 Ansible 中的预期行为。
问:"为什么我不能将发行版主版本保存为 int?"
A:Ansible 决定你不能(待办事项:需要参考源代码)。在YAML中,共有三个基本原语:
- 映射 (hashes/dictionaries)
- 序列 (arrays/lists)
- 标量 (strings/numbers)
如您所见,标量既是字符串又是数字。但是,出于某种我不知道的原因,Ansible 决定任何 "{{ scalar }}"
表达式只能 return string 或 boolean。例如
- set_fact:
distromajor: "{{ ansible_facts['distribution_major_version']|int }}"
- debug:
var: distromajor
- debug:
msg: "{{ distromajor|type_debug }}"
给出一个字符串,尽管显式转换为整数,正如您已经发现的那样
distromajor: '20'
msg: AnsibleUnsafeText
我正在尝试提取主要发行版(ansible_facts 以字符串形式保存)并将其存储为整数,以便以后与整数进行 < 或 > 比较。当我这样做时:
set_fact:
distromajor: "{{ ansible_facts['distribution_major_version'] | int }}"
我发现 distromajor 持有“7”而不是 7。所以后来的比较失败了。事实上,我唯一能让它工作的方法就是这样比较:
(distromajor|int >=6) and (distromajor|int <= 8)
这是预期的行为吗?为什么我不能将发行版主版本保存为 int?
最接近的
问:"这是预期的行为吗?"
答:是的。这是 Ansible 中的预期行为。
问:"为什么我不能将发行版主版本保存为 int?"
A:Ansible 决定你不能(待办事项:需要参考源代码)。在YAML中,共有三个基本原语:
- 映射 (hashes/dictionaries)
- 序列 (arrays/lists)
- 标量 (strings/numbers)
如您所见,标量既是字符串又是数字。但是,出于某种我不知道的原因,Ansible 决定任何 "{{ scalar }}"
表达式只能 return string 或 boolean。例如
- set_fact:
distromajor: "{{ ansible_facts['distribution_major_version']|int }}"
- debug:
var: distromajor
- debug:
msg: "{{ distromajor|type_debug }}"
给出一个字符串,尽管显式转换为整数,正如您已经发现的那样
distromajor: '20'
msg: AnsibleUnsafeText