将命令输出从ansible lineinfile模块添加到文件中



我正试图编写一个可解析的任务,将以下命令的输出合并到/etc/lvm/lvm.conf文件中:

[root@ansible]# vgs --noheadings -o vg_name
my_vg        
rhel_home
rhel_root

上述值需要添加如下:

volume_list = [ "rhel_root", "rhel_home", "my_vg" ]

在托管节点中,上述参数如下:

# volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]

请帮助我继续前进,因为我被困在这里:

- name: Fetch the Volume group
shell: "vgs --noheadings -o vg_name"
register: vgs
- debug:
msg: "{{ vgs.stdout }}"
- name: Line in file
lineinfile:
path: /tmp/lvm.conf
regex: "volume_list = .*"
line: "volume_list = [ vgs.stdout_lines ]"

它添加了一行,如下所示,在vg名称中没有双引号:volume_list=[vgs.stdout_liness]在底部,而不是替换下面的行:

volume_list=["vg1","vg2/lvol1","@tag1","@*"]

需要帮助以获得输出volume_list=["rhel_root","rhel_home","my_vg"]

出于您的目的,您需要在lineinfile任务中使用{{ vgs.stdout_lines }}列表(而不是"vgs.stdout_lines"字符串(变量。

类似:

line: "volume_list = {{ vgs.stdout_lines | to_json }}"

不过,我注意到命令返回的VGNames前面有一些空白,比如" rhel_root"。因此,将set_fact作为另一个具有不必要的空白trim-med的变量可能是一个好主意

- command: vgs --noheadings -o vg_name
register: vgs
- set_fact:
volume_list: "{{ volume_list | default([]) + [ item | trim ] }}"
loop: "{{ vgs.stdout_lines }}"
- lineinfile:
path: /tmp/lvm.conf
regexp: '# volume_list ='
line: 'volume_list = {{ volume_list | to_json }}'

最新更新