Introducció

Els mòduls personalitzats d'Ansible permeten als usuaris crear funcionalitats específiques que no estan cobertes pels mòduls predefinits. Això és especialment útil quan es treballa amb aplicacions o sistemes únics que requereixen operacions especials.

Objectius

En aquest tema, aprendràs:

  • Què són els mòduls personalitzats.
  • Com crear un mòdul personalitzat.
  • Com integrar i utilitzar el teu mòdul personalitzat en un playbook.

Què són els Mòduls Personalitzats?

Els mòduls personalitzats són scripts que defineixen operacions específiques que es poden executar en els nodes gestionats per Ansible. Aquests mòduls es poden escriure en diversos llenguatges de programació, però Python és el més comú.

Estructura d'un Mòdul Personalitzat

Un mòdul personalitzat típicament inclou:

  • Documentació: Descripció del mòdul, paràmetres, exemples d'ús.
  • Argument Spec: Definició dels paràmetres que el mòdul accepta.
  • Funció Principal: La lògica que executa el mòdul.
  • Resultats: Retorn de l'estat i els resultats de l'execució.

Exemple Pràctic: Creant un Mòdul Personalitzat

Pas 1: Crear l'Esquelet del Mòdul

#!/usr/bin/python

from ansible.module_utils.basic import AnsibleModule

def run_module():
    module_args = dict(
        name=dict(type='str', required=True)
    )

    result = dict(
        changed=False,
        original_message='',
        message=''
    )

    module = AnsibleModule(
        argument_spec=module_args,
        supports_check_mode=True
    )

    name = module.params['name']
    result['original_message'] = name
    result['message'] = 'Hello, {}'.format(name)

    if module.check_mode:
        module.exit_json(**result)

    result['changed'] = True

    module.exit_json(**result)

def main():
    run_module()

if __name__ == '__main__':
    main()

Pas 2: Documentar el Mòdul

#!/usr/bin/python

from ansible.module_utils.basic import AnsibleModule

DOCUMENTATION = '''
---
module: hello_module
short_description: Aquest és un mòdul de prova
description:
    - Aquest mòdul saluda l'usuari amb el nom proporcionat.
options:
    name:
        description:
            - Nom de l'usuari a saludar.
        required: true
author:
    - El teu Nom (@el_teu_handle)
'''

EXAMPLES = '''
# Exemple d'ús
- name: Saludar l'usuari
  hello_module:
    name: "Ansible"
'''

RETURN = '''
original_message:
    description: El nom original proporcionat
    type: str
    returned: always
message:
    description: El missatge de salutació
    type: str
    returned: always
'''

def run_module():
    module_args = dict(
        name=dict(type='str', required=True)
    )

    result = dict(
        changed=False,
        original_message='',
        message=''
    )

    module = AnsibleModule(
        argument_spec=module_args,
        supports_check_mode=True
    )

    name = module.params['name']
    result['original_message'] = name
    result['message'] = 'Hello, {}'.format(name)

    if module.check_mode:
        module.exit_json(**result)

    result['changed'] = True

    module.exit_json(**result)

def main():
    run_module()

if __name__ == '__main__':
    main()

Pas 3: Integrar el Mòdul en un Playbook

---
- name: Exemple de Playbook amb Mòdul Personalitzat
  hosts: localhost
  tasks:
    - name: Saludar l'usuari amb el mòdul personalitzat
      hello_module:
        name: "Ansible"
      register: result

    - name: Mostrar el missatge de salutació
      debug:
        msg: "{{ result.message }}"

Exercici Pràctic

Exercici

Crea un mòdul personalitzat que accepti dos números com a paràmetres i retorni la seva suma.

Solució

#!/usr/bin/python

from ansible.module_utils.basic import AnsibleModule

def run_module():
    module_args = dict(
        num1=dict(type='int', required=True),
        num2=dict(type='int', required=True)
    )

    result = dict(
        changed=False,
        sum=0
    )

    module = AnsibleModule(
        argument_spec=module_args,
        supports_check_mode=True
    )

    num1 = module.params['num1']
    num2 = module.params['num2']
    result['sum'] = num1 + num2

    if module.check_mode:
        module.exit_json(**result)

    result['changed'] = True

    module.exit_json(**result)

def main():
    run_module()

if __name__ == '__main__':
    main()

Playbook per Provar el Mòdul

---
- name: Exemple de Playbook amb Mòdul de Suma
  hosts: localhost
  tasks:
    - name: Sumar dos números amb el mòdul personalitzat
      sum_module:
        num1: 5
        num2: 7
      register: result

    - name: Mostrar la suma
      debug:
        msg: "La suma és {{ result.sum }}"

Conclusió

Els mòduls personalitzats d'Ansible són una eina poderosa per estendre les capacitats d'Ansible i adaptar-lo a necessitats específiques. Amb una comprensió bàsica de Python i la estructura dels mòduls, pots crear funcionalitats personalitzades que s'integren perfectament amb els teus playbooks.

© Copyright 2024. Tots els drets reservats