Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables Playboook中的Ansible集合\事实嵌套变量_Variables_Ansible_Nested_Set_Fact - Fatal编程技术网

Variables Playboook中的Ansible集合\事实嵌套变量

Variables Playboook中的Ansible集合\事实嵌套变量,variables,ansible,nested,set,fact,Variables,Ansible,Nested,Set,Fact,我对这个问题已经研究了一段时间,找不到解决办法 我的剧本是: -hosts:localhost 连接:本地 收集事实:错误 变量: vpc_堆栈_名称:“vpc-CF” 任务: -名称:获取有关堆栈的摘要信息 amazon.aws.cloudformation\u信息: 堆栈\u名称:“{{vpc\u堆栈\u名称}” 寄存器:vpc\u堆栈\u事实 -调试: var:“vpc_stack_facts.cloudformation['{{vpc_stack_name}}}].stack_输出['V

我对这个问题已经研究了一段时间,找不到解决办法

我的剧本是:

-hosts:localhost
连接:本地
收集事实:错误
变量:
vpc_堆栈_名称:“vpc-CF”
任务:
-名称:获取有关堆栈的摘要信息
amazon.aws.cloudformation\u信息:
堆栈\u名称:“{{vpc\u堆栈\u名称}”
寄存器:vpc\u堆栈\u事实
-调试:
var:“vpc_stack_facts.cloudformation['{{vpc_stack_name}}}].stack_输出['VPCID']”
-设定事实:
temp:{{vpc_stack_facts.cloudformation['{vpc_stack_name}}].stack_输出['VPCID']}”
我知道嵌入的
{{vpc\u stack\u name}}
是错误的,是不允许的,但我不知道如何绕过它

我还没有掌握Ansible查找功能


提前谢谢你

如您所述,在Jinja上下文中使用Jinja表达式
{{vpc_stack_name}}
是不正确的。Ansible将尝试计算没有引号作为变量的任何文本。因此,您可以保持
vpc\u stack\u name
变量的原样:
[vpc\u stack\u name]

例如:

vars:
vpc_堆栈_名称:vpc-CF
任务:
-云信息:
堆栈\u名称:“{{vpc\u堆栈\u名称}”
寄存器:vpc\u堆栈\u事实
-设定事实:
临时变量:{{vpc_stack_facts['cloudformation'][vpc_stack_name | quote]['stack_outputs']['vpc']}”
-调试:
变量:临时变量
注意:在上面的示例中,我使用键as
VPC
获取VPC ID作为输出

  • 使用
    ['']
    符号代替点
    访问dict项
  • 已使用
    | quote
    围绕变量
    vpc_stack_name
收益率:

ok: [localhost] => {
    "temp_var": "vpc-1234ab5678c90d1e"
}

当您正在为
var
属性重建var名称时,
debug
看起来正常。对于你的
set_fact
你不能嵌套jinja2标记,只需使用保存相应值的var名称=>
“{{vpc_stack_facts.cloudformation[vpc_stack_name].stack_outputs['VPCID']}”
。OP当前用于
debug:var
的表达式是完全正确的(尽管我建议在本例中使用
msg
,但不应引发错误。删除点符号只需要使用包含“特殊”字符(空格、破折号等)的变量或文字键名,而
堆栈输出不需要它(尽管您完全可以选择)。
”{{vpc_stack_facts.cloudformation[vpc_stack_name].stack_outputs.VPCID}“
将同时适用于
set_fact
debug:msg
是的问题是在Jinja上下文中为
debug:msg
set_fact
使用Jinja表达式。我意识到它也适用于点表示法,但有
[]
似乎更加一致。这确实是一个意见问题;)我总是喜欢点符号而不是数组符号(不太详细),并且不关心混合。我的观点是:在这种情况下,您不必更改点符号,这实际上并不是解决OP问题的方法。我的意图不是说使用
[]
| quote
将解决OP的问题。如果听起来像这样,我更改了解释示例的顺序。谢谢@seshadri_c&Zeitounator这真是太好了!我没有意识到我在使用点符号和[]的组合!我盲目地跟随另一个示例以获得特定的堆栈输出!