用 jinja2 ansible 裁剪一个子字符串
ansible crop a substring with jinja2
我想在 ansible 中裁剪一个 sting,最好使用 replace 命令。
“db-FFREG.domain.inet”应更改为“db-FFREG”。我已经找到了一个 split 的解决方案,它正在工作。但我想用 regex
来做到这一点
解决方案有效,但不够优雅:
---
- hosts: localhost
gather_facts: no
vars:
hostname: db-FFREG.domain.inet
tasks:
- name: Change hostname into ORACLE SID
set_fact:
myOracleSid: "{{hostname.split('.') }}"
- debug:
msg:
- "ORACLE_SID: {{ myOracleSid[0] }}"
我更喜欢的解决方案是使用 jinja2 - 没有错误消息,但不会裁剪任何内容:
---
- hosts: localhost
gather_facts: no
vars:
hostname: db-FFREG.domain.inet
tasks:
- name: Change hostname into ORACLE SID
set_fact:
myOracleSid: "{{hostname | replace('^(.+).domain.inet$','') }}"
- debug:
msg:
- "ORACLE_SID: {{ myOracleSid }}"
嗯,这个成功了!
这比我想象的要容易!
---
- hosts: localhost
gather_facts: no
vars:
hostname: db-FFREG.domain.inet
tasks:
- name: Change hostname into ORACLE SID
set_fact:
myOracleSid: "{{hostname | replace('.domain.inet','') }}"
- debug:
msg:
- "ORACLE_SID: {{ myOracleSid }}"
如果要从字符串的 end 中删除 .domain.inet
,则需要使用正则表达式:
{{ hostname | regex_replace('\.domain\.inet$', '') }}
注意使用了 regex_replace
函数,点被转义以匹配文字点,$
用于匹配字符串的结尾。
要删除第一个点之后的所有内容,请使用
{{ hostname | regex_replace('\..*', '') }}
其中 \.
匹配文字 .
并且 .*
匹配除换行符以外的任何零个或多个字符。
我想在 ansible 中裁剪一个 sting,最好使用 replace 命令。 “db-FFREG.domain.inet”应更改为“db-FFREG”。我已经找到了一个 split 的解决方案,它正在工作。但我想用 regex
来做到这一点解决方案有效,但不够优雅:
---
- hosts: localhost
gather_facts: no
vars:
hostname: db-FFREG.domain.inet
tasks:
- name: Change hostname into ORACLE SID
set_fact:
myOracleSid: "{{hostname.split('.') }}"
- debug:
msg:
- "ORACLE_SID: {{ myOracleSid[0] }}"
我更喜欢的解决方案是使用 jinja2 - 没有错误消息,但不会裁剪任何内容:
---
- hosts: localhost
gather_facts: no
vars:
hostname: db-FFREG.domain.inet
tasks:
- name: Change hostname into ORACLE SID
set_fact:
myOracleSid: "{{hostname | replace('^(.+).domain.inet$','') }}"
- debug:
msg:
- "ORACLE_SID: {{ myOracleSid }}"
嗯,这个成功了! 这比我想象的要容易!
---
- hosts: localhost
gather_facts: no
vars:
hostname: db-FFREG.domain.inet
tasks:
- name: Change hostname into ORACLE SID
set_fact:
myOracleSid: "{{hostname | replace('.domain.inet','') }}"
- debug:
msg:
- "ORACLE_SID: {{ myOracleSid }}"
如果要从字符串的 end 中删除 .domain.inet
,则需要使用正则表达式:
{{ hostname | regex_replace('\.domain\.inet$', '') }}
注意使用了 regex_replace
函数,点被转义以匹配文字点,$
用于匹配字符串的结尾。
要删除第一个点之后的所有内容,请使用
{{ hostname | regex_replace('\..*', '') }}
其中 \.
匹配文字 .
并且 .*
匹配除换行符以外的任何零个或多个字符。