如何将 JSON 文件从远程主机导入 Ansible 变量?
How to import JSON file from a remote host into Ansible variable?
我正在使用 ansible.builtin.slurp 来执行此操作。这是我的 Ansible 角色的相关部分:
- name: Load config
slurp:
src: "/etc/mlnx_snap/mlnx_snap.json"
register: imported_config
- name: Debug
debug:
var: imported_config
我希望调试打印我的文件,但是,发生了一些不同的事情。
文件内容如下:
root@ratchet01-snic:~# cat /etc/mlnx_snap/mlnx_snap.json
{
"ctrl": {
"sqes": 0x6,
"cqes": 0x4,
"cq_period": 3,
"cq_max_count": 6,
"nr_io_queues": 32,
"mn": "Mellanox BlueField NVMe SNAP Controller",
"sn": "MNC12",
"mdts": 4,
"oncs": 0,
"offload": false,
"max_namespaces": 0,
"quirks": 0x0
},
"backends": [ {
"type": "spdk_bdev",
"paths": [{}]
} ]
}
这是调试输出的样子:
Debug...
retchet01-snic.mtr.labs.mlnx ok: {
"changed": false,
"imported_config": {
"changed": false,
"content": "LyoKICogcHJ...CiAgICB9IF0KfQo=",
"encoding": "base64",
"failed": false,
"source": "/etc/mlnx_snap/mlnx_snap.json"
}
}
内容实际上有数千个字符,我只是为了便于阅读而缩短了它。
假设我在这个角色中有以下任务:
- name: Do x
module_name:
var_name: value
when: imported_config.ctrl.quirks >= 0
如何正确导入 JSON 文件,这样的任务才能完成?我做错了什么?
以下内容有助于获取 JSON 文件的原始文本:
- name: Debug
debug:
var: imported_config.content|b64decode
要进一步将其解码为变量,我需要使用这个:
- name: Debug
debug:
var: imported_config.content|b64decode|from_json
然而,由于 JSON 格式无效,我无法做到这一点(尽管 JSON 中不允许,但由于某些奇怪的原因,它包含评论)。但这超出了这个问题的初始范围。
使用from_yaml。 JSON 是 YAML 的子集。例如
- set_fact:
content: "{{ imported_config.content|b64decode|from_yaml }}"
- debug:
msg: "{{ content.ctrl.quirks >= 0 }}"
给予
msg: true
我正在使用 ansible.builtin.slurp 来执行此操作。这是我的 Ansible 角色的相关部分:
- name: Load config
slurp:
src: "/etc/mlnx_snap/mlnx_snap.json"
register: imported_config
- name: Debug
debug:
var: imported_config
我希望调试打印我的文件,但是,发生了一些不同的事情。 文件内容如下:
root@ratchet01-snic:~# cat /etc/mlnx_snap/mlnx_snap.json
{
"ctrl": {
"sqes": 0x6,
"cqes": 0x4,
"cq_period": 3,
"cq_max_count": 6,
"nr_io_queues": 32,
"mn": "Mellanox BlueField NVMe SNAP Controller",
"sn": "MNC12",
"mdts": 4,
"oncs": 0,
"offload": false,
"max_namespaces": 0,
"quirks": 0x0
},
"backends": [ {
"type": "spdk_bdev",
"paths": [{}]
} ]
}
这是调试输出的样子:
Debug...
retchet01-snic.mtr.labs.mlnx ok: {
"changed": false,
"imported_config": {
"changed": false,
"content": "LyoKICogcHJ...CiAgICB9IF0KfQo=",
"encoding": "base64",
"failed": false,
"source": "/etc/mlnx_snap/mlnx_snap.json"
}
}
内容实际上有数千个字符,我只是为了便于阅读而缩短了它。
假设我在这个角色中有以下任务:
- name: Do x
module_name:
var_name: value
when: imported_config.ctrl.quirks >= 0
如何正确导入 JSON 文件,这样的任务才能完成?我做错了什么?
以下内容有助于获取 JSON 文件的原始文本:
- name: Debug
debug:
var: imported_config.content|b64decode
要进一步将其解码为变量,我需要使用这个:
- name: Debug
debug:
var: imported_config.content|b64decode|from_json
然而,由于 JSON 格式无效,我无法做到这一点(尽管 JSON 中不允许,但由于某些奇怪的原因,它包含评论)。但这超出了这个问题的初始范围。
使用from_yaml。 JSON 是 YAML 的子集。例如
- set_fact:
content: "{{ imported_config.content|b64decode|from_yaml }}"
- debug:
msg: "{{ content.ctrl.quirks >= 0 }}"
给予
msg: true