【问题标题】:Remove quotes from Ansible variable output从 Ansible 变量输出中删除引号
【发布时间】:2016-02-11 14:33:36
【问题描述】:

我正在使用此任务向文件中添加一行:

lineinfile: "dest={{ ansible_env.HOME }}/{{ deploy_dir }}/config/deploy/{{ stage_name }}.rb
              insertbefore='# role-based syntax'
              line='server "'{{ ip_addr }}'", user: "'{{ user_name }}'", roles: %w{'{{ role }}'}'"

增加了这一行:

server '172.16.8.11', user: 'vagrant', roles: %w{'api'}

但我不想要 api 周围的引号。相反,我想要这个输出:

server '172.16.8.11', user: 'vagrant', roles: %w{api}

【问题讨论】:

    标签: automation yaml ansible jinja2 configuration-management


    【解决方案1】:

    实际上引号不是来自变量,而是就在你的字符串中:

    %w{'{{ role }}'}
    

    现在解决方案有点棘手。因为您不能像这样简单地删除引号:

    %w{{{ role }}}
    

    这将导致解析错误,因为{{ 启动了一个表达式...

    解决方案是将外圆括号写入字符串中,作为表达式本身。

    所以要输出{,你应该写{{'{'}},而不是},你应该写{{'}'}}。那有意义吗?您正在指示模板引擎 (Jinja2) 输出括号以避免解析错误:

    %w{{'{'}}{{ role }}{{'}'}}
    

    但是由于role已经是一个表达式,你也可以将它组合成一个表达式:

    %w{{ '{'+role+'}' }}
    

    你的整个任务会变成这样:

    - lineinfile:
        dest: "{{ ansible_env.HOME }}/{{ deploy_dir }}/config/deploy/{{ stage_name }}.rb"
        insertbefore: "# role-based syntax"
        line: "server '{{ ip_addr }}', user: '{{ user_name }}', roles: %w{{ '{'+role+'}' }}"
    

    这也被转换为正确的 YAML 语法,因为这种引用的 k=v 格式真的很难阅读。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-03
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 2010-12-29
      相关资源
      最近更新 更多