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