簡體   English   中英

在Jinja2中重寫群組模板

[英]rewrite a group template in Jinja2 and ansible

我有一些模板,需要在其中裝飾一些服務器名稱,並且我想在一行中完成此操作,以便可以將字符串用作變量。

{{ group_vars["dbservers"] | WHAT GOES HERE | list }}

這將需要一個清單

[dbservers]
db-1
db-2
db-3

然后在模板中,我需要這樣:

{
  servers: [
    "http://db-1:1234", 
    "http://db-2:1234", 
    "http://db-3:1234"
  ] ....
}

截至目前,我正在執行以下操作:

servers: [
{% for h in groups["dbservers"] %}
"http://{{hostvars[h].ansible_fqdn}}:{{ mymagicport}}"
{% if not loop.last %},{% endfor %}
{% endfor %}
]

我一點都不愛。 我希望能夠以一種可用的方式存儲它,然后只需調用config.to_nice_json

但是我似乎找不到合適的方法來內聯價值。 我一直在搞亂map功能,但無濟於事。 有任何想法嗎?

它可以通過mapregex_replace

主持人

[db-servers]
db-1 fqdn_fact=db-server-1
db-2 fqdn_fact=db-srv-2
db-3 fqdn_fact=server-3

劇本

---
- hosts: localhost
  gather_facts: no
  vars:
    mymagicport: '1234'
  tasks:
    - debug:
        msg: "{{ groups['db-servers'] | map('regex_replace','(.*)','http://\\1:'+mymagicport) | list }}"
    - debug:
        msg: "{{ groups['db-servers'] | map('extract',hostvars,'fqdn_fact') | map('regex_replace','(.*)','http://\\1:'+mymagicport) | list }}"

第一項任務-使用清單主機名,第二項任務-使用hostvars任意事實。

結果:

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": [
        "http://db-1:1234",
        "http://db-2:1234",
        "http://db-3:1234"
    ]
}

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": [
        "http://db-server-1:1234",
        "http://db-srv-2:1234",
        "http://server-3:1234"
    ]
}

暫無
暫無

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

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