用于拆分、替换和连接的 Jinja2 表达式

Jinja2 expression for split , replace and join

在 Ansible 剧本中,我们有变量 'dns_name: xyz.abc.pqr.*.com',因为我们有一个名为 es_config.yml 的模板文件,所以 cname 的值应该是 (cname: .abc.pqr..com)

我们如何为此编写 jinja2 表达式?

dns_name: xyz.abc.com (或) xyz.abc.pqr.***.com

cname: *.abc.com (Or) .abc.pqr.**.com (我们必须使用 dns_name 的变量)

剧本

- hosts: elastic-search-servers
  gather_facts: true
  vars:
    es_admin_hostname: test.develop123.com
  tasks:
    - name: split string
      set_fact:
        cname: "{{ es_admin_hostname.split('.') }} | first | replace('*')"

    - name: debug
      debug:
        msg: "{{ cname[1:] }} is dns name"

需要输出

*.develop123.com

只需将您的拆分更改为 regex_replaces:

- name: split string
  set_fact:
    cname: "{{ es_admin_hostname| regex_replace('^[^\.]+', '*') }}"

- name: debug
  debug:
    msg: "{{ cname }} is dns name"

结果:

ok: [localhost] => {
    "msg": "*.develop123.com is dns name"
}

'^[^\\.]+' 表示从字符串开头捕获所有字符,直到我遇到一个点并将它们替换为 * (需要 \\ 因为. 是特殊字符)