#!/usr/bin/python # -*- coding: utf-8 -*- # Copyright: (c) 2024, Luca Bilke <luca@bil.ke> # MIT License (see LICENSE) # TODO: write ansible sections DOCUMENTATION = r""" """ EXAMPLES = r""" """ RETURN = r""" """ from __future__ import annotations # pyright: ignore[reportGeneralTypeIssues] import copy from ansible.module_utils.basic import AnsibleModule from ansible_collections.snailed.ez_compose.plugins.module_utils.common import ( State, exit, get_state, remove_service, update_project, update_service, ) def helper(state: State) -> State: project_name = state.module.params["project_name"] definition = state.module.params["definition"] internal_network = state.module.params.get("internal_network", False) update = copy.deepcopy(definition) networks = update.get("networks", {}) if internal_network: networks[f"{project_name}_internal"] = None update["networks"] = networks return update_service(state, update) def main(): module = AnsibleModule( argument_spec={ "project_name": { "type": "str", "required": True, }, "name": { "type": "str", "required": True, }, "internal_network": { "type": "bool", }, "state": { "type": "str", "default": "present", "choices": ["present", "absent"], }, "definition": { "type": "dict", "required": True, }, }, supports_check_mode=True, ) state = get_state(module) if module.params["state"] == "absent": state = remove_service(state) else: for f in [helper, update_project]: state = f(state) exit(state) if __name__ == "__main__": main()