cloudscale_server: refactor to implement update (#52683)

This commit is contained in:
René Moser 2019-03-05 10:40:16 +01:00 committed by GitHub
parent d1c0df9e92
commit aafc5538bc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 445 additions and 137 deletions

View file

@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
__metaclass__ = type
from copy import deepcopy
from ansible.module_utils.basic import env_fallback
from ansible.module_utils.urls import fetch_url
from ansible.module_utils._text import to_text
@ -27,6 +28,10 @@ class AnsibleCloudscaleBase(object):
def __init__(self, module):
self._module = module
self._auth_header = {'Authorization': 'Bearer %s' % module.params['api_token']}
self._result = {
'changed': False,
'diff': dict(before=dict(), after=dict()),
}
def _get(self, api_call):
resp, info = fetch_url(self._module, API_URL + api_call,
@ -44,6 +49,13 @@ class AnsibleCloudscaleBase(object):
def _post_or_patch(self, api_call, method, data):
headers = self._auth_header.copy()
if data is not None:
# Sanitize data dictionary
# Deepcopy: Duplicate the data object for iteration, because
# iterating an object and changing it at the same time is insecure
for k, v in deepcopy(data).items():
if v is None:
del data[k]
data = self._module.jsonify(data)
headers['Content-type'] = 'application/json'
@ -80,3 +92,9 @@ class AnsibleCloudscaleBase(object):
else:
self._module.fail_json(msg='Failure while calling the cloudscale.ch API with DELETE for '
'"%s".' % api_call, fetch_url_info=info)
def get_result(self, resource):
if resource:
for k, v in resource.items():
self._result[k] = v
return self._result