2017-05-15 13 views
0

いくつかのテンプレートを用意して、いくつかのサーバー名を飾る必要があります。この文字列を変数として使用できるように、これを1行で行いたいと思います。Jinja2でグループテンプレートを書き直してもらえますか

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

のようなリストを取得し、その後、私は、このようにそれらを必要とするテンプレートでます

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

:今、私はこのような何かをやっているのよう

{ 
    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の機能を使いこなしているが役に立たない。何か案は?

+0

、私はそれがSOにオフトピックですし、代わりにコードレビューに掲載されなければならないので、オフトピックとして、この質問を閉じるために投票しています。 – techraf

+0

話題外であることに加えて、私は誰もあなたのユースケースに対して適切なフィルタを提案するとは思わない。誰かがカスタムを書いていない限り。 – techraf

答えて

1

それは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 }}" 

まずタスク - 在庫ホスト名、2番目のタスクで動作するように -から任意の事実を扱う。

結果:

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" 
    ] 
} 
関連する問題