用于拆分、替换和连接的 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"
}
'^[^\\.]+' 表示从字符串开头捕获所有字符,直到我遇到一个点并将它们替换为 * (需要 \\ 因为. 是特殊字符)
在 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"
}
'^[^\\.]+' 表示从字符串开头捕获所有字符,直到我遇到一个点并将它们替换为 * (需要 \\ 因为. 是特殊字符)