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

关于如何保留类型,还有更多选项

  • 使用配置选项(默认值:False)
  • “此选项在模板操作期间保留变量类型。”

    这将影响整个剧本。比如说

    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”

    你为什么希望得到这样的输出?太好了,这正是我想要的,非常感谢!这似乎是一个好消息。不客气!