2025-04-11 13:01:38 +00:00

106 lines
2.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 sil 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()