Ansible set_事实类型转换
我遇到了一个问题,希望得到您的帮助,谢谢 例如:Ansible set_事实类型转换,ansible,Ansible,我遇到了一个问题,希望得到您的帮助,谢谢 例如: - hosts: localhost tasks: - name: "set variable" set_fact: test1: a: 1 - name: "assignment" set_fact: test2: a: "{{test1.a}}" - name: "
- hosts: localhost
tasks:
- name: "set variable"
set_fact:
test1:
a: 1
- name: "assignment"
set_fact:
test2:
a: "{{test1.a}}"
- name: "print test2"
debug:
var: test2
输出为:
"test2":{ "a": "1"}
我所期望的是:
"test2":{ "a": 1}
这是默认行为。我不确定您为什么希望显示没有引号的值 也许您认为该值已转换为字符串,但事实并非如此
-名称:设置变量
设定事实:
测试1:
a:1
-名称:检查变量是否为整数
断言:
即:
-test1.a | type_debug==“int”
-test1.a是正则表达式(“^[0-9]+$”)
-姓名:派遣
调试:
var:“{test1.a}”
Q:输出是:“test2”:{“a”:“1”}
答:这是正确的。的输出是一个字符串(它是一个模板引擎)。您将test1.a
声明为整数(不带引号)
-设置事实:
测试1:
a:1
-调试:
msg:{{test1.a | type_debug}}”
给予
msg:int
但是,“{{test1.a}}”
的计算结果是一个字符串
-设置事实:
测试2:
a:“{test1.a}”
-调试:
变量:test2
-调试:
msg:{{test2.a | type_debug}}”
给予
test2:
a:‘1’
msg:str
关于如何保留类型,还有更多选项
shell>ANSIBLE_JINJA2_NATIVE=真正的ANSIBLE剧本pb.yml
给予
test2:
a:1
msg:int
-设置事实:
test2:“{test2 | default({})| combine({'a':test1.a})}”
-调试:
变量:test2
-调试:
msg:{{test2.a | type_debug}}”
给予
test2:
a:1
msg:int
单个(裸)变量的行为不同,并保留类型。比如说
-设置事实:
v2:1
-调试:
msg:“{v2}”
-调试:
msg:{v2 | type_debug}}”
-设定事实:
v3:“{v2}}”
-调试:
msg:“{v3}}”
-调试:
msg:{v3 | type_debug}}”
给予
msg:1
msg:int
味精:1
msg:int
(我使用了
yaml
callback插件“ANSIBLE\u STDOUT\u callback=yaml ANSIBLE playbook pb.yml”
)你为什么希望得到这样的输出?太好了,这正是我想要的,非常感谢!这似乎是一个好消息。不客气!