【问题标题】:Ansible's variables seem to vanish inside set_factAnsible 的变量似乎在 set_fact 中消失了
【发布时间】:2018-10-19 16:34:43
【问题描述】:

是否存在一些奇怪的 Ansible 行为,这意味着inventory_hostname 仅在某些上下文中有效?

这是我正在处理的剧本的一部分,第一个调试语句显示了正确的值,但 set_fact 然后选择了一个空列表,然后在第二个调试任务中选择了该列表。

出于某种原因,完全相同的表达式debugset_fact 中的行为不同,我不明白为什么。就好像inventory_hostnameset_fact 任务中未定义(我什至收到一条消息,提示如果我在两种情况下都标记为“| first”过滤器,就像我最终想要做的那样。

- name: debug it
  debug:
    var: all_tagged_droplets.json.droplets | selectattr('name', 'equalto', '{{inventory_hostname}}') | list

- name: find the right droplet
  set_fact: 
    droplet: "{{ all_tagged_droplets.json.droplets | selectattr('name', 'equalto', '{{inventory_hostname}}') | list }}"

- name: debug it
  debug:
    var: droplet

关于如何将数据放入更明智的变量的任何指针?

【问题讨论】:

    标签: ansible jinja2


    【解决方案1】:

    哦,我太傻了。

    我试图评估inventory_hostname 两次!!因为在第二种情况下,我需要整个表达式的 {{ ... }},所以我忘了从变量中删除它。

    正确答案是:

    - name: debug it
      debug:
        var: all_tagged_droplets.json.droplets | selectattr('name', 'equalto', '{{inventory_hostname}}') | list
    
    - name: find the right droplet
      set_fact: 
        droplet: "{{ all_tagged_droplets.json.droplets | selectattr('name', 'equalto', inventory_hostname) | list }}"
    
    - name: debug it
      debug:
        var: droplet
    

    查看set_fact 行中的表达式已修复。

    【讨论】:

      猜你喜欢
      • 2019-05-11
      • 2022-08-24
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      相关资源
      最近更新 更多