我正在尝试在 YAML 文件中添加一些项目,从 ansible (核心 2.16.5)调用 yq (v4.43.1)。它正确插入值,但不带引号,这会使其成为有效的 yaml 文件。现在我使用 ansible.builtin.replace 在字符串周围添加引号,但我正在寻找更好的解决方案。
这是剧本,它假设 ansible 和 yq 已经在机器上:
---
- name: Customize cluster.yaml
hosts: localhost
vars:
rook_tag: "v1.14.0"
ceph_datapath:
rpi4b-1: "sda3"
rpi4b-2: "sda3"
rpi4b-3: "sda3"
rpi4b-4: "sda3"
rpi4b-5: "sda3"
rock3a: "nvme0n1p3"
vim4: "nvme0n1"
nanopct6: "mmcblk0p3"
opi5p: "mmcblk0p3"
rock5b: "mmcblk0p3"
tasks:
- name: Download cluster.yaml manifest from Internet
ansible.builtin.get_url:
url: "https://raw.githubusercontent.com/rook/rook/{{ 'release-' + '.'.join(''.join(rook_tag.split('v')[1:]).split('.')[:2]) }}/deploy/examples/cluster.yaml"
dest: ./cluster.yaml
mode: '0664'
- name: Set spec.storage.config.nodes
ansible.builtin.shell: >
/usr/local/bin/yq -i '.spec.storage.config.nodes += [{"name": "{{ item.key }}", "devices": [{"name": "{{ item.value }}"}]}]' cluster.yaml
with_dict: "{{ ceph_datapath }}"
register: command_output
changed_when: command_output.rc == 0
生成的 cluster.yaml 文件的相关部分是:
config:
nodes:
- name: rpi4b-1
devices:
- name: sda3
- name: rpi4b-2
devices:
- name: sda3
- name: rpi4b-3
devices:
- name: sda3
- name: rpi4b-4
devices:
- name: sda3
- name: rpi4b-5
devices:
- name: sda3
- name: rock3a
devices:
- name: nvme0n1p3
- name: vim4
devices:
- name: nvme0n1
- name: nanopct6
devices:
- name: mmcblk0p3
- name: opi5p
devices:
- name: mmcblk0p3
- name: rock5b
devices:
- name: mmcblk0p3
如何使用 yq 在名称周围添加引号?
谢谢你!