如何替换 Ansible 变量值中的几个字符?
How to replace several characters in an Ansible variable's value?
我有一个名为 joomlaversion 的变量,我使用它 json_query。 joomlaversion 的值是 4.0.2 但我试图用破折号交换点所以它变成 4-0-2
如何在此 ansible 变量值中用点替换破折号?
我正在使用 Ansible 2.9.6
这是我试过的。
---
- name: Download JSON content
uri:
url: https://api.github.com/repos/joomla/joomla-cms/releases
return_content: yes
register: jsoncontent
- name: Get latest version of Joomla from the tag using contains
set_fact:
joomlaversion: "{{ jsoncontent.json | to_json | from_json |json_query(jmesquery)|json_query(jmesquery2) }}"
vars:
jmesquery: "[? (draft==`false` && prerelease==`false`)]"
jmesquery2: "[?name.contains(@, 'Joomla! 4')].tag_name|[0]"
- name: Replace the dots with dashes in Joomla version
set_fact:
joomlaversion2: "{{ joomlaversion }} | replace('.', '-')"
#joomlaversion2: '{{ joomlaversion | regex_findall("\."),("\-") }}'
它不是将点更改为破折号,而是附加 | replace('.','-') 到变量值上,所以它变成“4.0.2 | replace ('.', '-')”
也许我可以使用 https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#manipulating-strings
中提到的过滤器
如果我可以使用 split(".") 拆分它,然后再加入它?
If I could split it using split(".") then join it again afterwards perhaps?
你完全可以做到!
例如:
- set_fact:
joomlaversion2: "{{ joomlaversion.split('.') | join('-') }}"
或者,使用 regex_replace
,这将找到一个模式并将其替换为连字符。
# since . matches any char, we need to escape it with \
- set_fact:
joomlaversion2: "{{ joomlaversion | regex_replace('\.', '-') }}"
您必须添加 {{ }} 和转义。与 \:
- set_fact:
joomlaversion: "4.0.2"
- set_fact:
joomlaversion2: "{{ joomlaversion | regex_replace('\.', '-') }}"
- debug:
var: joomlaversion2
结果:
ok: [localhost] => {
"joomlaversion2": "4-0-2"
}
我有一个名为 joomlaversion 的变量,我使用它 json_query。 joomlaversion 的值是 4.0.2 但我试图用破折号交换点所以它变成 4-0-2
如何在此 ansible 变量值中用点替换破折号?
我正在使用 Ansible 2.9.6
这是我试过的。
---
- name: Download JSON content
uri:
url: https://api.github.com/repos/joomla/joomla-cms/releases
return_content: yes
register: jsoncontent
- name: Get latest version of Joomla from the tag using contains
set_fact:
joomlaversion: "{{ jsoncontent.json | to_json | from_json |json_query(jmesquery)|json_query(jmesquery2) }}"
vars:
jmesquery: "[? (draft==`false` && prerelease==`false`)]"
jmesquery2: "[?name.contains(@, 'Joomla! 4')].tag_name|[0]"
- name: Replace the dots with dashes in Joomla version
set_fact:
joomlaversion2: "{{ joomlaversion }} | replace('.', '-')"
#joomlaversion2: '{{ joomlaversion | regex_findall("\."),("\-") }}'
它不是将点更改为破折号,而是附加 | replace('.','-') 到变量值上,所以它变成“4.0.2 | replace ('.', '-')”
也许我可以使用 https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#manipulating-strings
中提到的过滤器如果我可以使用 split(".") 拆分它,然后再加入它?
If I could split it using split(".") then join it again afterwards perhaps?
你完全可以做到!
例如:
- set_fact:
joomlaversion2: "{{ joomlaversion.split('.') | join('-') }}"
或者,使用 regex_replace
,这将找到一个模式并将其替换为连字符。
# since . matches any char, we need to escape it with \
- set_fact:
joomlaversion2: "{{ joomlaversion | regex_replace('\.', '-') }}"
您必须添加 {{ }} 和转义。与 \:
- set_fact:
joomlaversion: "4.0.2"
- set_fact:
joomlaversion2: "{{ joomlaversion | regex_replace('\.', '-') }}"
- debug:
var: joomlaversion2
结果:
ok: [localhost] => {
"joomlaversion2": "4-0-2"
}