From aa0e33dc88aaeb80d11689454301e63f623f8e5f Mon Sep 17 00:00:00 2001 From: midas Date: Wed, 30 Apr 2025 08:43:19 +0000 Subject: [PATCH] library/my_calendar_sync.py aktualisiert --- library/my_calendar_sync.py | 60 ++++++++++--------------------------- 1 file changed, 16 insertions(+), 44 deletions(-) diff --git a/library/my_calendar_sync.py b/library/my_calendar_sync.py index 6113a13..6954d97 100644 --- a/library/my_calendar_sync.py +++ b/library/my_calendar_sync.py @@ -1,28 +1,17 @@ #!/usr/bin/env python3 from ansible.module_utils.basic import AnsibleModule -import subprocess -import sys - -# Auto-Install, falls caldav fehlt -try: - from caldav import DAVClient - import vobject -except ImportError: - subprocess.check_call([sys.executable, "-m", "pip", "install", "caldav", "vobject"]) - from caldav import DAVClient - import vobject - +from caldav import DAVClient +import vobject def connect_calendar(url, user=None, password=None): client = DAVClient(url, username=user, password=password) if user else DAVClient(url) principal = client.principal() calendars = principal.calendars() if not calendars: - raise Exception(f"Kein Kalender gefunden unter {url}") + raise Exception(f"Kein Kalender unter {url} gefunden") return calendars[0] - def get_event_uid_map(calendar): uid_map = {} for event in calendar.events(): @@ -34,7 +23,6 @@ def get_event_uid_map(calendar): continue return uid_map - def sync_calendars(source_cal, target_cal): src_events = get_event_uid_map(source_cal) tgt_events = get_event_uid_map(target_cal) @@ -61,52 +49,36 @@ def sync_calendars(source_cal, target_cal): return changed, added, updated, removed - def run_module(): module_args = dict( source_url=dict(type='str', required=True), source_user=dict(type='str', required=False, default=None), - source_password=dict(type='str', required=False, default=None, no_log=True), + source_password=dict(type='str', required=False, no_log=True, default=None), target_url=dict(type='str', required=True), target_user=dict(type='str', required=True), - target_password=dict(type='str', required=True, no_log=True), + target_password=dict(type='str', required=True, no_log=True) ) - result = dict( - changed=False, - added=[], - updated=[], - removed=[], - ) + result = dict(changed=False) module = AnsibleModule(argument_spec=module_args, supports_check_mode=False) try: - source_cal = connect_calendar( - module.params['source_url'], - module.params['source_user'], - module.params['source_password'] - ) - target_cal = connect_calendar( - module.params['target_url'], - module.params['target_user'], - module.params['target_password'] - ) + source_cal = connect_calendar(module.params['source_url'], module.params['source_user'], module.params['source_password']) + target_cal = connect_calendar(module.params['target_url'], module.params['target_user'], module.params['target_password']) changed, added, updated, removed = sync_calendars(source_cal, target_cal) - result['changed'] = changed - result['added'] = added - result['updated'] = updated - result['removed'] = removed + result.update({ + "changed": changed, + "added": added, + "updated": updated, + "removed": removed, + }) - module.exit_json(**result) except Exception as e: module.fail_json(msg=str(e), **result) - -def main(): - run_module() - + module.exit_json(**result) if __name__ == '__main__': - main() + run_module()