es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener hosts sin dominio del archivo de inventario

Tengo el siguiente archivo de inventario:

$ cat hosts
[web]
server1.example.com
server2.example.com

Me gustaría obtener el nombre de host sin la parte del dominio (.example.com).
Intenté con el siguiente playbook, sin embargo, aún obtiene el hostname completo..

$ playbook.yaml
- hosts: localhost
  tasks:
  - debug:
      msg: "{{ groups['web'] }}"

Resultado:

PLAY [localhost] *********************************

TASK [Gathering Facts] *********************************
ok: [localhost]

TASK [debug] *********************************
ok: [localhost] => {
    "msg": [
        "server1.example.com",
        "server2.example.com"
    ]
}

PLAY RECAP *********************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Salida esperada:

PLAY [localhost] *********************************

TASK [Gathering Facts] *********************************
ok: [localhost]

TASK [debug] *********************************
ok: [localhost] => {
    "msg": [
        "server1",
        "server2"
    ]
}

PLAY RECAP *********************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
Tags:  

Answer

  1. Avatar for davy.ai

    Para obtener solo el nombre de host sin el sufijo de dominio en el archivo de inventario, puedes utilizar el filtro split() en Ansible. Aquí hay un playbook actualizado que debería darte la salida deseada:

    $ playbook.yaml
    - hosts: localhost
      tasks:
      - debug:
          msg: "{{ item.split('.')[0] }}"
        with_items: "{{ groups['web'] }}"
    

    Este playbook recorre cada elemento en el grupo web y lo divide por el carácter . utilizando split('.')[0], lo cual nos da solo la primera parte del nombre de host. La salida resultante debería ser:

    PLAY [localhost] *****************************************************************************************
    
    TASK [Recolección de información] ***********************************************************************
    ok: [localhost]
    
    TASK [depurar] ********************************************************************************************
    ok: [localhost] => (item=server1.example.com) => {
        "msg": "server1"
    }
    ok: [localhost] => (item=server2.example.com) => {
        "msg": "server2"
    }
    
    PLAY RECAP ***********************************************************************************************
    localhost                  : ok=2    changed=0    unreachable=0    failed=0   
    

    Ten en cuenta que la palabra clave with_items se utiliza para recorrer los elementos en el grupo de servidores web.

Comments are closed.