簡體   English   中英

從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格式真的很難閱讀。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM