diff --git a/library/kpm.py b/library/kpm.py new file mode 100644 index 000000000..69e42d612 --- /dev/null +++ b/library/kpm.py @@ -0,0 +1,104 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import kpm.deploy +from ansible.module_utils.basic import * + +DOCUMENTATION = """ +--- +module: kpm +short_description: Application deployment on kubernetes with kpm registry +description: + - Create, remove, and update resources within a Kubernetes Cluster +version_added: "2.0" +options: + name: + required: true + default: null + description: + - The name of the kpm package + namespace: + required: false + default: 'default' + description: + - The namespace to deploy package. It will be created if doesn't exist + force: + required: false + default: false + description: + - A flag to indicate to force delete, replace. + registry: + required: false + default: 'https://api.kpm.sh' + description: + - The registry url to fetch packages + version: + required: false + default: 'None' + description: + - The package version + state: + required: false + choices: ['present', 'absent'] + default: present + description: + - present handles checking existence or creating resources, + absent handles deleting resource(s). +requirements: + - kubectl + - kpm +author: "Antoine Legrand (ant31_2t@msn.com)" +""" + +EXAMPLES = """ +- name: check presence or install ghost + kpm: name=ghost/ghost state=present + +- name: check absence or remove rocketchat + kpm: name=ant31/rocketchat state=absent +""" + +RETURN = """ +""" + + +def check_changed(result, state='present'): + no_change = ["ok", 'protected', 'absent'] + for r in result: + if r['status'] not in no_change: + return True + return False + + +def main(): + module = AnsibleModule( + supports_check_mode=True, + argument_spec = dict( + version = dict(default=None, required=False), + state = dict(default='present', choices=['present', 'absent']), + name = dict(required=True), + force = dict(required=False, default=False, type='bool'), + registry = dict(required=False, default="https://api.kpm.sh"), + namespace=dict(default='default', required=False))) + + params = {"version": module.params.get("version"), + "namespace": module.params.get('namespace'), + "endpoint": module.params.get('registry'), + "dry": module.check_mode, + "proxy": None, + "fmt": "json"} + state = module.params.get("state") + try: + if state == 'present': + r = kpm.deploy.deploy(module.params.get('name'), **params) + elif state == 'absent': + r = kpm.deploy.delete(module.params.get('name'), **params) + except Exception as e: + module.fail_json(msg=e.message) + res = {} + res['kpm'] = r + res['changed'] = check_changed(r, state) + module.exit_json(**res) + +if __name__ == '__main__': + main() diff --git a/roles/kubernetes-apps/defaults/main.yaml b/roles/kubernetes-apps/defaults/main.yaml new file mode 100644 index 000000000..d95001316 --- /dev/null +++ b/roles/kubernetes-apps/defaults/main.yaml @@ -0,0 +1,4 @@ +--- +kpm_registry: "https://api.kpm.sh" +kpm_namespace: "default" +kpm_packages: [] \ No newline at end of file diff --git a/roles/kubernetes-apps/tasks/main.yaml b/roles/kubernetes-apps/tasks/main.yaml new file mode 100644 index 000000000..36b010bf9 --- /dev/null +++ b/roles/kubernetes-apps/tasks/main.yaml @@ -0,0 +1,9 @@ +- name: manage kubernetes applications + kpm: + namespace: "{{item.namespace | default(kpm_namespace | default('default'))}}" + registry: "{{item.registry | default(kpm_registry | default('https://api.kpm.sh'))}}" + state: "{{item.state | default(omit)}}" + version: "{{item.version | default(omit)}}" + name: "{{item.name}}" + with_items: "{{kpm_packages}}" + register: kpmresults