首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Jinja2和ansible重写组模板

用Jinja2和ansible重写组模板
EN

Stack Overflow用户
提问于 2017-05-15 23:30:51
回答 1查看 277关注 0票数 0

我有几个模板,我需要装饰一些服务器名称,我想这样做在一行,以便我可以使用字符串作为一个变量。

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

这将需要一个清单,如

代码语言:javascript
复制
[dbservers]
db-1
db-2
db-3

然后在模板中我需要这样的:

代码语言:javascript
复制
{
  servers: [
    "http://db-1:1234", 
    "http://db-2:1234", 
    "http://db-3:1234"
  ] ....
}

到目前为止,我正在做这样的事情:

代码语言:javascript
复制
servers: [
{% for h in groups["dbservers"] %}
"http://{{hostvars[h].ansible_fqdn}}:{{ mymagicport}}"
{% if not loop.last %},{% endfor %}
{% endfor %}
]

我一点也不喜欢。我希望能够以一种可用的方式存储它,然后调用config.to_nice_json

但我似乎找不到正确的方法来内联价值。我一直在乱搞map函数,但都没有用。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-16 06:35:20

它适用于mapregex_replace

主机

代码语言:javascript
复制
[db-servers]
db-1 fqdn_fact=db-server-1
db-2 fqdn_fact=db-srv-2
db-3 fqdn_fact=server-3

剧本

代码语言:javascript
复制
---
- 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的任意事实。

结果:

代码语言:javascript
复制
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"
    ]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43990276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档