我正在收集可靠的事实。序列号有大写和小写两种形式。见下文。
5A2c32a-f1G85g-2035-0483-1fe9c129216d
Run Code Online (Sandbox Code Playgroud)
我需要将该事实与另一个完全小写的序列号进行比较。请参见下文。
5a2c32a-f1g85g-2035-0483-1fe9c129216d
Run Code Online (Sandbox Code Playgroud)
如果我使用 jinja2 过滤器转换为小写。然后我无法操作 json 输出。例如。我试过这个
- set_fact:
facts: "{{ facts | lower | to_json }}"
- debug:
var: facts.instance
Run Code Online (Sandbox Code Playgroud)
它抛出错误
TASK [play : set_fact] ******************************************************************************
ok: [localhost]
TASK [play : debug] ******************************************************************************
ok: [localhost] => {
"facts.instance": "VARIABLE IS NOT DEFINED!"
}
Run Code Online (Sandbox Code Playgroud)
但如果我facts只调试。它给了我输出。下面的作品,
- set_fact:
facts: "{{ facts | lower | to_json }}"
- debug:
var: facts
Run Code Online (Sandbox Code Playgroud)
但我需要获得更多的价值facts.instance.disk等
我正在 Ansible 中设置一个事实,并且该变量的值带有连字符,例如“ dos-e1-south-209334567829102380 ”。我想拆分,所以我只能得到“dos-e1-south”
这里是戏
- set_fact:
config: "{{ asg.results|json_query('[*].launch_configuration_name') }}"
- debug:
var: config
Run Code Online (Sandbox Code Playgroud) 我正在注册操作的输出,然后应用过滤器来显示值。但我也想将该显示的值注册为变量。我无法将其注册为变量。有谁知道这个问题的解决方案?
这是我的剧本
---
- name: Filtering output to register in a variable
hosts: localhost
gather_facts: no
tasks:
- name: register filtered output to a variable
uri:
url: https://example.com/api/id
method: GET
user: administrator
password: password
force_basic_auth: yes
validate_certs: no
register: restdata
- name: Display the output
debug: msg="{{ restdata.json.parameter[1] }}"
Run Code Online (Sandbox Code Playgroud)
我想知道。会不会更简单。如果我们先过滤输出然后将其注册为变量?有谁知道这是怎么做到的吗 ?
我在ansible中使用regex_replace过滤器。我可以让它工作,但它真的很麻烦。这就是我正在做的
- set_fact:
variable: "{{ value | regex_replace("84","89") | regex_replace("76","78") | regex_replace("45","23"}}"
Run Code Online (Sandbox Code Playgroud)
有没有一种方法,我可以通过管道 regex_replace 一次并用多个值替换多个模式。