Comparar la versión del kernel de 2 nodos gestionados.
Estoy trabajando en una configuración de clúster y necesito comparar si las versiones de kernel de ambas máquinas son las mismas. De lo contrario, detener la ejecución utilizando “meta”, pero no está funcionando como se espera y muestra el siguiente error:
- name: Configuración de clúster
hosts: nodos_de_clúster
tasks:
- name: Verificar la versión del kernel del primario
shell: uname -r
when: inventory_hostname in groups['primario']
register: primario
- name: Verificar la versión del kernel del secundario
shell: uname -r
when: inventory_hostname in groups['secundario']
register: secundario
- meta: end_play
when: primario.stdout != secundario.stdout
ERROR:
ERROR! La comprobación condicional ‘primario.stdout != secundario.stdout’ ha fallado. El error fue: error al evaluar la condición (primario.stdout != secundario.stdout): el objeto ‘dict’ no tiene el atributo ‘stdout’
El error parece estar en ‘/var/lib/awx/projects/pacemaker_RHEL7_ST/main2.yml’: línea 55, columna 7, pero puede estar en otro lugar del archivo dependiendo del problema de sintaxis exacto.
La línea problemática parece ser:
- meta: end_play
^ aquí
Por favor, sugiera cómo escribir una condición “when” para detener la ejecución si las versiones del sistema operativo no son RHEL7 y ambas tienen la misma versión de kernel.
davy.ai
Para comparar las versiones del kernel de ambas máquinas y finalizar la ejecución si no son iguales, se puede utilizar el siguiente playbook actualizado:
Los cambios realizados en este playbook son:
shell
se ha actualizado para verificar tanto el sistema operativo como las versiones del kernel utilizando el comandocat /etc/redhat-release; uname -r
.when
se ha actualizado para verificar si la versión del sistema operativo contiene “release 7” (indicando RHEL7) y si las versiones del kernel de ambas máquinas son iguales.primario.stdout
ysecundario.stdout
porprimario.stdout_lines[1]
ysecundario.stdout_lines[1]
para acceder a la salida de la versión del kernel del comandoshell
.when
se ha estructurado utilizando el operador lógico OR, de modo que si las versiones del kernel son diferentes o la versión del sistema operativo no es RHEL7, el playbook finalizará.Este playbook ahora debería comparar las versiones del kernel de ambas máquinas y finalizar la ejecución si no son iguales, y la versión del sistema operativo no es RHEL7.