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
