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.
Ansible: De Principiant a Avançat
Mòdul 1: Introducció a Ansible
Mòdul 2: Conceptes bàsics d'Ansible
Mòdul 3: Playbooks
- Introducció als Playbooks
- Escrivint el teu primer Playbook
- Estructura del Playbook
- Variables i Fets
- Condicionals i Bucles
Mòdul 4: Rols
Mòdul 5: Tècniques Avançades de Playbook
Mòdul 6: Ansible Galaxy
Mòdul 7: Ansible Tower
- Introducció a Ansible Tower
- Instal·lant Ansible Tower
- Utilitzant Ansible Tower
- Gestionant Projectes i Inventaris
