我正试图编写一个可解析的任务,将以下命令的输出合并到/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 }}'