|
@ -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() |