[英]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格式真的很難閱讀。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.