Jinja2 expression for split , replace and join

Viewed 153

In Ansible playbooks, We have the variable 'dns_name: xyz.abc.pqr.*.com' where as we have one template file called es_config.yml there the value of cname should be (cname: .abc.pqr..com)

How can we write jinja2 expression for this ?

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

cname: *.abc.com (Or) .abc.pqr.**.com (We have to use variable of dns_name)

Playbook

- 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"

Required Output

*.develop123.com

1 Answers

just change your split by regex_replaces:

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

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

result:

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

'^[^\\.]+' means trap all chars from beginning of string until i meet a dot and replace them by * (the \\ is needed because . is special char)

Related