Quería imprimir la línea específica /etc/fstab
basada en el UUID definido en una variable. Pero cuando intento con el siguiente código no obtengo los resultados adecuados.
Código:
---
- name: check
hosts: all
become: true
tasks:
- name: set fact for uuid
set_fact:
uuid_disk: "{{ item.value.links.uuids }}"
loop: "{{ ansible_devices | dict2items }}"
when: ('swap' in (item.value.links.labels))
- name: print
debug:
msg: "{{ uuid_disk | join() }}"
- name: fstab
slurp:
src: /etc/fstab
register: output
- name: print
debug:
msg: "{{ item | select('match','UUID') | list }}"
loop: "{{ (output.content | b64decode).splitlines() }}"
- name: print
debug:
msg: "{{ item }}"
loop: "{{ (output.content | b64decode).splitlines() }}"
when: (item | regex_search('^UUID')) in uuid_disk
Respuesta1
P:"Imprime la línea del archivo según el UUID definido en una variable".
R: Busque el archivo y seleccione la línea. Por ejemplo, declare la ruta para almacenar /etc/fstab en el controlador
fstab_path: "/tmp/test/{{ inventory_hostname }}/fstab"
y buscar el archivo
- fetch:
src: /etc/fstab
dest: "{{ fstab_path }}"
flat: true
Dada la variable con el valor UUID
uuid_disk: 01865fce-8bb9-48ad-a9eb-1ff43a8db4a5
buscar la línea
uuid_line: "{{ lookup('file', fstab_path).splitlines()|
select('search', uuid_disk) }}"
da por ejemplo,
uuid_line:
- UUID=01865fce-8bb9-48ad-a9eb-1ff43a8db4a5 none swap sw 0 0
Ejemplo de un libro de jugadas completo para realizar pruebas.
- hosts: all
vars:
uuid_disk: 01865fce-8bb9-48ad-a9eb-1ff43a8db4a5
fstab_path: "/tmp/test/{{ inventory_hostname }}/fstab"
uuid_line: "{{ lookup('file', fstab_path).splitlines()|
select('search', uuid_disk) }}"
tasks:
- fetch:
src: /etc/fstab
dest: "{{ fstab_path }}"
flat: true
- debug:
var: uuid_line
La solución anterior imprime las líneas fstab de los UUID etiquetadosintercambio. (Así es como se obtiene el UUID). Viceversa, puede imprimir las particiones utilizadas comointercambioen fstab. Deja que exprese esa pregunta de otra manera
P:"Desde /etc/fstab obtenga el UUID de las particiones de intercambio. Luego, muestre las particiones".
R: Primero recopile los hechos y cree un UUID/partición de diccionario. Luego, analice /etc/fstab y obtenga el UUID de las entradas de intercambio. Obtenga las particiones de los UUID.
- Reúna los hechos
- setup:
gather_subset: devices
, obtener las particiones y crear el diccionario.UUID
partitions: "{{ ansible_devices|
json_query('*.partitions')|
combine }}"
uuid: "{{ dict(partitions|
dict2items|
selectattr('value.uuid')|
json_query('[].[value.uuid, key]')) }}"
da por ejemplo,
uuid:
01865fce-8bb9-48ad-a9eb-1ff43a8db4a5: sdb4
04dc9170-bdbc-4a22-abaf-b9e3cf1ba969: sda5
7074BA0A74B9D2D8: sda2
9a2199dd-0662-47b4-a957-adbcf5d350f4: sdb5
EC808480808452CE: sda1
F86C-A380: sdb2
c484594d-fd2e-4f57-9c14-74b8e397d8ed: sdb3
- Declare la ruta para almacenar /etc/fstab en el controlador
fstab_path: "/tmp/test/{{ inventory_hostname }}/fstab"
y buscar el archivo
- fetch:
src: /etc/fstab
dest: "{{ fstab_path }}"
flat: true
Usa el filtrocomunidad.general.jcpara crear la lista de diccionariosfstab
fstab: "{{ lookup('file', fstab_path)|
community.general.jc('fstab') }}"
da por ejemplo,
fstab:
- fs_file: /
fs_freq: 0
fs_mntops: errors=remount-ro
fs_passno: 1
fs_spec: UUID=c484594d-fd2e-4f57-9c14-74b8e397d8ed
fs_vfstype: ext4
- fs_file: /boot/efi
fs_freq: 0
fs_mntops: umask=0077
fs_passno: 1
fs_spec: UUID=F86C-A380
fs_vfstype: vfat
- fs_file: /export
fs_freq: 0
fs_mntops: defaults
fs_passno: 2
fs_spec: UUID=9a2199dd-0662-47b4-a957-adbcf5d350f4
fs_vfstype: ext4
- fs_file: none
fs_freq: 0
fs_mntops: sw
fs_passno: 0
fs_spec: UUID=01865fce-8bb9-48ad-a9eb-1ff43a8db4a5
fs_vfstype: swap
- fs_file: none
fs_freq: 0
fs_mntops: sw
fs_passno: 0
fs_spec: /usr/swap0
fs_vfstype: swap
Obtenga los UUID de las entradas de intercambio
uuid_swap: "{{ fstab|
selectattr('fs_vfstype', '==', 'swap')|
selectattr('fs_spec', 'match', 'UUID=')|
map(attribute='fs_spec')|
map('split', '=')|
map('last') }}"
da
uuid_swap:
- 01865fce-8bb9-48ad-a9eb-1ff43a8db4a5
- Obtenga las particiones de los UUID
partition_swap: "{{ uuid_swap|map('extract', uuid) }}"
da
partition_swap:
- sdb4
Ejemplo de un libro de jugadas completo para realizar pruebas.
- hosts: all
vars:
partitions: "{{ ansible_devices|
json_query('*.partitions')|
combine }}"
uuid: "{{ dict(partitions|
dict2items|
selectattr('value.uuid')|
json_query('[].[value.uuid, key]')) }}"
fstab_path: "/tmp/test/{{ inventory_hostname }}/fstab"
fstab: "{{ lookup('file', fstab_path)|
community.general.jc('fstab') }}"
uuid_swap: "{{ fstab|
selectattr('fs_vfstype', '==', 'swap')|
selectattr('fs_spec', 'match', 'UUID=')|
map(attribute='fs_spec')|
map('split', '=')|
map('last') }}"
partition_swap: "{{ uuid_swap|map('extract', uuid) }}"
tasks:
- setup:
gather_subset: devices
- debug:
var: uuid
- fetch:
src: /etc/fstab
dest: "{{ fstab_path }}"
flat: true
- debug:
var: fstab
- debug:
var: uuid_swap
- debug:
var: partition_swap
Respuesta2
Acerca de
¿Cómo imprimir la línea específica del archivo según el UUID definido en la variable?
Puedes echar un vistazo al siguiente libro de jugadas de ejemplo mínimo.
---
- hosts: localhost
become: false
gather_facts: false
vars:
uuid_disk: 12345678-abcd-efgh-ijkl-123456789012
tasks:
- name: fstab
slurp:
src: /etc/fstab
register: output
- name: Print UUID, if there is any
debug:
msg: "{{ item | regex_search('[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}') }}"
loop: "{{ (output.content | b64decode).splitlines() }}"
- name: Print line where UUID match
debug:
msg: "{{ item }}"
loop: "{{ (output.content | b64decode).splitlines() }}"
when: uuid_disk in item
yPreguntas y respuestas similaresacerca de