【问题标题】:How to get interpolated value of variable in Ansible / Jinja2如何在 Ansible / Jinja2 中获取变量的插值
【发布时间】:2020-08-10 09:29:10
【问题描述】:

我正在尝试以这种方式定义 Ansible 变量:

user:
  name: First Last
  nick: '{{ vars["user"]["name"] | regex_replace("\W", "_") }}'
  email: '{{ vars["user"]["nick"] }}@example.com'

结果email 是:"{{ vars[\"user\"][\"name\"] | regex_replace(\"\\W\", \"_\") }}@example.com

我还尝试像这样设置email{{ lookup("vars", "user.nick") }}@example.com
{{ lookup("vars", "user")["nick"] }}@example.com
它说An unhandled exception occurred while running the lookup plugin 'vars'

有没有办法得到结果变量值:

user:
  name: First Last
  nick: First_Last
  email: First_Last@example.com

?

ansible 2.9.10, python版本= 3.8.5

【问题讨论】:

    标签: ansible jinja2 ansible-template ansible-filter


    【解决方案1】:

    在字典中不可能交叉引用键。有必要在字典之外声明变量。例如,剧本

    - hosts: localhost
      vars:
        my_name: First Last
        my_nick: "{{ my_name | regex_replace('\\W', '_') }}"
        user:
          name: "{{ my_name }}"
          nick: "{{ my_nick }}"
          email: "{{ my_nick }}@example.com"
      tasks:
        - debug:
            var: user
    

    给予(删节)

      user:
        email: First_Last@example.com
        name: First Last
        nick: First_Last
    

    更灵活的选择是在循环中创建变量。例如,剧本

    - hosts: localhost
      vars:
        users:
          "First Last":
            domain: example.com
      tasks:
        - debug:
            msg:
              - "name: {{ name }}"
              - "nick: {{ nick }}"
              - "email: {{ email }}"
          loop: "{{ users|dict2items }}"
          vars:
            name: "{{ item.key }}"
            nick: "{{ item.key|regex_replace('\\W', '_') }}"
            email: "{{ nick ~ '@' ~ item.value.domain }}"
    

    给予(删节)

      msg:
      - 'name: First Last'
      - 'nick: First_Last'
      - 'email: First_Last@example.com'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-09
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多