feat: add examples of persionalized module
This commit is contained in:
		
							
								
								
									
										14
									
								
								modules/library/my_module.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								modules/library/my_module.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| #!/usr/bin/python | ||||
| from ansible.module_utils.basic import AnsibleModule | ||||
| def main(): | ||||
|     module = AnsibleModule( | ||||
|             argument_spec={ | ||||
|                 "name": {"type": "str", "required": True} | ||||
|             } | ||||
|         ) | ||||
|     name = module.params["name"] | ||||
|     if name == "admin": | ||||
|         module.fail_json(msg="Nom réservé !") | ||||
|     module.exit_json(changed=True, msg=f"Bonjour {name}")  | ||||
| if __name__ == '__main__': | ||||
|     main() | ||||
							
								
								
									
										106
									
								
								modules/library/second_module.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								modules/library/second_module.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| #!/usr/bin/python | ||||
|  | ||||
| from ansible.module_utils.basic import AnsibleModule | ||||
| import os | ||||
|  | ||||
| DOCUMENTATION = """ | ||||
| --- | ||||
| module: mon_module | ||||
| short_description: Crée un fichier avec un message personnalisé | ||||
| description: | ||||
|   - Ce module écrit un message de salutation dans un fichier. | ||||
|   - Il prend en compte l'idempotence, le mode check, et fournit un diff si le fichier change. | ||||
| options: | ||||
|   name: | ||||
|     description: | ||||
|       - Le nom de la personne à saluer. | ||||
|     required: true | ||||
|     type: str | ||||
|   path: | ||||
|     description: | ||||
|       - Le chemin du fichier à créer ou mettre à jour. | ||||
|     required: true | ||||
|     type: str | ||||
| author: | ||||
|   - "Moi !!" | ||||
| """ | ||||
|  | ||||
| EXAMPLES = """ | ||||
| - name: Créer un message dans un fichier | ||||
|   mon_module: | ||||
|     name: Alice | ||||
|     path: /tmp/bonjour.txt | ||||
| """ | ||||
|  | ||||
| RETURN = """ | ||||
| message: | ||||
|   description: Résultat de l'exécution | ||||
|   type: str | ||||
|   returned: always | ||||
| diff: | ||||
|   description: Ancien vs nouveau contenu (si applicable) | ||||
|   type: dict | ||||
|   returned: when changed | ||||
| """ | ||||
|  | ||||
| def main(): | ||||
|     module = AnsibleModule( | ||||
|         argument_spec=dict( | ||||
|             name=dict(type="str", required=True), | ||||
|             path=dict(type="str", required=True), | ||||
|         ), | ||||
|         supports_check_mode=True | ||||
|     ) | ||||
|  | ||||
|     name = module.params["name"] | ||||
|     path = module.params["path"] | ||||
|  | ||||
|     # Nouveau contenu généré | ||||
|     new_content = f"Bonjour {name} ! Passe une excellente journée avec Ansible.\n" | ||||
|     old_content = "" | ||||
|  | ||||
|     # Lire l'ancien contenu s'il existe | ||||
|     if os.path.exists(path): | ||||
|         try: | ||||
|             with open(path, "r") as f: | ||||
|                 old_content = f.read() | ||||
|         except Exception as e: | ||||
|             module.fail_json(msg=f"Erreur de lecture du fichier : {str(e)}") | ||||
|  | ||||
|     # Vérifier s’il y a une réelle différence | ||||
|     content_changed = old_content != new_content | ||||
|  | ||||
|     # Mode check : on affiche le diff mais on ne change rien | ||||
|     if module.check_mode: | ||||
|         module.exit_json( | ||||
|             changed=content_changed, | ||||
|             message="Simulation : le fichier serait mis à jour." if content_changed else "Simulation : aucun changement.", | ||||
|             diff={"before": old_content, "after": new_content} if content_changed else {} | ||||
|         ) | ||||
|  | ||||
|     # Si le contenu est déjà identique → rien à faire | ||||
|     if not content_changed: | ||||
|         module.exit_json( | ||||
|             changed=False, | ||||
|             message="Aucun changement nécessaire. Le fichier est déjà à jour." | ||||
|         ) | ||||
|  | ||||
|     # Sinon, on écrit le nouveau contenu | ||||
|     try: | ||||
|         with open(path, "w") as f: | ||||
|             f.write(new_content) | ||||
|     except Exception as e: | ||||
|         module.fail_json(msg=f"Erreur d'écriture du fichier : {str(e)}") | ||||
|  | ||||
|     # Message visible dans le callback (stdout) | ||||
|     print(f"Nouveau message pour {name} écrit dans {path}") | ||||
|  | ||||
|     # Fin : on informe Ansible que le contenu a changé | ||||
|     module.exit_json( | ||||
|         changed=True, | ||||
|         message=f"Fichier {path} mis à jour pour {name}.", | ||||
|         diff={"before": old_content, "after": new_content} | ||||
|     ) | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     main() | ||||
							
								
								
									
										12
									
								
								modules/module-example.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								modules/module-example.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| --- | ||||
| - name: Exemple Ansible module personnalisé | ||||
|   hosts: localhost | ||||
|   gather_facts: false | ||||
|   tasks: | ||||
|     - name: Dire bonjour | ||||
|       my_module: | ||||
|         name: Dany LE | ||||
|       register: result | ||||
|     - name: Afficher le message | ||||
|       debug: | ||||
|         msg: "{{ result.msg }}" | ||||
							
								
								
									
										17
									
								
								modules/second_module.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								modules/second_module.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| - name: Test du module personnalisé second_module | ||||
|   hosts: localhost | ||||
|   connection: local | ||||
|   gather_facts: false | ||||
|   tasks: | ||||
|     - name: Utiliser second_module pour dire bonjour | ||||
|       second_module: | ||||
|         name: Dany LE | ||||
|         path: /tmp/bonjour_ansible-2.txt | ||||
|       register: result | ||||
|     - name: Afficher le message du module | ||||
|       debug: | ||||
|         msg: "{{ result.message }}" | ||||
|     - name: Afficher le diff (si présent) | ||||
|       debug: | ||||
|         var: result.diff | ||||
|       when: result.diff is defined | ||||
		Reference in New Issue
	
	Block a user