从 Ansible 变量输出中删除引号
Remove quotes from Ansible variable output
我正在使用此任务向文件添加一行:
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}
实际上引号不是来自变量,而是在您的字符串中:
%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 格式真的很难阅读。 :)
我正在使用此任务向文件添加一行:
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}
实际上引号不是来自变量,而是在您的字符串中:
%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 格式真的很难阅读。 :)