mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Refactor E-Series Volume to use module_utils (#20901)
Refactor the NetApp E-Series module to utlize the common module_utils and doc_fragments.
This commit is contained in:
parent
c38ff3b8f8
commit
760015fc6d
1 changed files with 13 additions and 70 deletions
|
@ -11,7 +11,6 @@ ANSIBLE_METADATA = {'metadata_version': '1.0',
|
||||||
'status': ['preview'],
|
'status': ['preview'],
|
||||||
'supported_by': 'community'}
|
'supported_by': 'community'}
|
||||||
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
DOCUMENTATION = '''
|
||||||
---
|
---
|
||||||
module: netapp_e_volume
|
module: netapp_e_volume
|
||||||
|
@ -19,28 +18,9 @@ version_added: "2.2"
|
||||||
short_description: Manage storage volumes (standard and thin)
|
short_description: Manage storage volumes (standard and thin)
|
||||||
description:
|
description:
|
||||||
- Create or remove volumes (standard and thin) for NetApp E/EF-series storage arrays.
|
- Create or remove volumes (standard and thin) for NetApp E/EF-series storage arrays.
|
||||||
|
extends_documentation_fragment:
|
||||||
|
- netapp.eseries
|
||||||
options:
|
options:
|
||||||
api_username:
|
|
||||||
required: true
|
|
||||||
description:
|
|
||||||
- The username to authenticate with the SANtricity WebServices Proxy or embedded REST API.
|
|
||||||
api_password:
|
|
||||||
required: true
|
|
||||||
description:
|
|
||||||
- The password to authenticate with the SANtricity WebServices Proxy or embedded REST API.
|
|
||||||
api_url:
|
|
||||||
required: true
|
|
||||||
description:
|
|
||||||
- The url to the SANtricity WebServices Proxy or embedded REST API.
|
|
||||||
validate_certs:
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
description:
|
|
||||||
- Should https certificates be validated?
|
|
||||||
ssid:
|
|
||||||
required: true
|
|
||||||
description:
|
|
||||||
- The ID of the array to manage (as configured on the web services proxy).
|
|
||||||
state:
|
state:
|
||||||
required: true
|
required: true
|
||||||
description:
|
description:
|
||||||
|
@ -136,42 +116,13 @@ import time
|
||||||
from traceback import format_exc
|
from traceback import format_exc
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
|
from ansible.module_utils.netapp import request, eseries_host_argument_spec
|
||||||
from ansible.module_utils.pycompat24 import get_exception
|
from ansible.module_utils.pycompat24 import get_exception
|
||||||
from ansible.module_utils.urls import open_url
|
|
||||||
from ansible.module_utils.six.moves.urllib.error import HTTPError
|
|
||||||
from ansible.module_utils.api import basic_auth_argument_spec
|
|
||||||
|
|
||||||
|
HEADERS = {
|
||||||
def request(url, data=None, headers=None, method='GET', use_proxy=True,
|
"Content-Type": "application/json",
|
||||||
force=False, last_mod_time=None, timeout=10, validate_certs=True,
|
"Accept": "application/json",
|
||||||
url_username=None, url_password=None, http_agent=None, force_basic_auth=True, ignore_errors=False):
|
}
|
||||||
try:
|
|
||||||
r = open_url(url=url, data=data, headers=headers, method=method, use_proxy=use_proxy,
|
|
||||||
force=force, last_mod_time=last_mod_time, timeout=timeout, validate_certs=validate_certs,
|
|
||||||
url_username=url_username, url_password=url_password, http_agent=http_agent,
|
|
||||||
force_basic_auth=force_basic_auth)
|
|
||||||
except HTTPError:
|
|
||||||
err = get_exception()
|
|
||||||
r = err.fp
|
|
||||||
|
|
||||||
try:
|
|
||||||
raw_data = r.read()
|
|
||||||
if raw_data:
|
|
||||||
data = json.loads(raw_data)
|
|
||||||
else:
|
|
||||||
raw_data is None
|
|
||||||
except:
|
|
||||||
if ignore_errors:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
raise Exception(raw_data)
|
|
||||||
|
|
||||||
resp_code = r.getcode()
|
|
||||||
|
|
||||||
if resp_code >= 400 and not ignore_errors:
|
|
||||||
raise Exception(resp_code, data)
|
|
||||||
else:
|
|
||||||
return resp_code, data
|
|
||||||
|
|
||||||
|
|
||||||
def ifilter(predicate, iterable):
|
def ifilter(predicate, iterable):
|
||||||
|
@ -198,13 +149,9 @@ class NetAppESeriesVolume(object):
|
||||||
yb=1024 ** 8
|
yb=1024 ** 8
|
||||||
)
|
)
|
||||||
|
|
||||||
self._post_headers = dict(Accept="application/json")
|
argument_spec = eseries_host_argument_spec()
|
||||||
self._post_headers['Content-Type'] = 'application/json'
|
|
||||||
|
|
||||||
argument_spec = basic_auth_argument_spec()
|
|
||||||
argument_spec.update(dict(
|
argument_spec.update(dict(
|
||||||
state=dict(required=True, choices=['present', 'absent']),
|
state=dict(required=True, choices=['present', 'absent']),
|
||||||
ssid=dict(required=True, type='str'),
|
|
||||||
name=dict(required=True, type='str'),
|
name=dict(required=True, type='str'),
|
||||||
storage_pool_name=dict(type='str'),
|
storage_pool_name=dict(type='str'),
|
||||||
size_unit=dict(default='gb', choices=['bytes', 'b', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb', 'zb', 'yb'],
|
size_unit=dict(default='gb', choices=['bytes', 'b', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb', 'zb', 'yb'],
|
||||||
|
@ -218,10 +165,6 @@ class NetAppESeriesVolume(object):
|
||||||
thin_volume_max_repo_size=dict(type='int'),
|
thin_volume_max_repo_size=dict(type='int'),
|
||||||
# TODO: add cache, owning controller support, thin expansion policy, etc
|
# TODO: add cache, owning controller support, thin expansion policy, etc
|
||||||
log_path=dict(type='str'),
|
log_path=dict(type='str'),
|
||||||
api_url=dict(type='str'),
|
|
||||||
api_username=dict(type='str'),
|
|
||||||
api_password=dict(type='str', no_log=True),
|
|
||||||
validate_certs=dict(type='bool'),
|
|
||||||
))
|
))
|
||||||
|
|
||||||
self.module = AnsibleModule(argument_spec=argument_spec,
|
self.module = AnsibleModule(argument_spec=argument_spec,
|
||||||
|
@ -337,7 +280,7 @@ class NetAppESeriesVolume(object):
|
||||||
self.debug("creating volume '%s'" % name)
|
self.debug("creating volume '%s'" % name)
|
||||||
try:
|
try:
|
||||||
(rc, resp) = request(self.api_url + "/storage-systems/%s/volumes" % (self.ssid),
|
(rc, resp) = request(self.api_url + "/storage-systems/%s/volumes" % (self.ssid),
|
||||||
data=json.dumps(volume_add_req), headers=self._post_headers, method='POST',
|
data=json.dumps(volume_add_req), headers=HEADERS, method='POST',
|
||||||
url_username=self.api_usr, url_password=self.api_pwd,
|
url_username=self.api_usr, url_password=self.api_pwd,
|
||||||
validate_certs=self.validate_certs,
|
validate_certs=self.validate_certs,
|
||||||
timeout=120)
|
timeout=120)
|
||||||
|
@ -362,7 +305,7 @@ class NetAppESeriesVolume(object):
|
||||||
self.debug("creating thin-volume '%s'" % name)
|
self.debug("creating thin-volume '%s'" % name)
|
||||||
try:
|
try:
|
||||||
(rc, resp) = request(self.api_url + "/storage-systems/%s/thin-volumes" % (self.ssid),
|
(rc, resp) = request(self.api_url + "/storage-systems/%s/thin-volumes" % (self.ssid),
|
||||||
data=json.dumps(thin_volume_add_req), headers=self._post_headers, method='POST',
|
data=json.dumps(thin_volume_add_req), headers=HEADERS, method='POST',
|
||||||
url_username=self.api_usr, url_password=self.api_pwd,
|
url_username=self.api_usr, url_password=self.api_pwd,
|
||||||
validate_certs=self.validate_certs,
|
validate_certs=self.validate_certs,
|
||||||
timeout=120)
|
timeout=120)
|
||||||
|
@ -420,7 +363,7 @@ class NetAppESeriesVolume(object):
|
||||||
(rc, resp) = request(
|
(rc, resp) = request(
|
||||||
self.api_url + "/storage-systems/%s/%s/%s/" % (self.ssid, self.volume_resource_name,
|
self.api_url + "/storage-systems/%s/%s/%s/" % (self.ssid, self.volume_resource_name,
|
||||||
self.volume_detail['id']),
|
self.volume_detail['id']),
|
||||||
data=json.dumps(update_volume_req), headers=self._post_headers, method='POST',
|
data=json.dumps(update_volume_req), headers=HEADERS, method='POST',
|
||||||
url_username=self.api_usr, url_password=self.api_pwd, validate_certs=self.validate_certs,
|
url_username=self.api_usr, url_password=self.api_pwd, validate_certs=self.validate_certs,
|
||||||
timeout=120)
|
timeout=120)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -453,7 +396,7 @@ class NetAppESeriesVolume(object):
|
||||||
(rc, resp) = request(self.api_url + "/storage-systems/%s/thin-volumes/%s/expand" % (self.ssid,
|
(rc, resp) = request(self.api_url + "/storage-systems/%s/thin-volumes/%s/expand" % (self.ssid,
|
||||||
self.volume_detail[
|
self.volume_detail[
|
||||||
'id']),
|
'id']),
|
||||||
data=json.dumps(thin_volume_expand_req), headers=self._post_headers, method='POST',
|
data=json.dumps(thin_volume_expand_req), headers=HEADERS, method='POST',
|
||||||
url_username=self.api_usr, url_password=self.api_pwd,
|
url_username=self.api_usr, url_password=self.api_pwd,
|
||||||
validate_certs=self.validate_certs, timeout=120)
|
validate_certs=self.validate_certs, timeout=120)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -474,7 +417,7 @@ class NetAppESeriesVolume(object):
|
||||||
(rc, resp) = request(
|
(rc, resp) = request(
|
||||||
self.api_url + "/storage-systems/%s/volumes/%s/expand" % (self.ssid,
|
self.api_url + "/storage-systems/%s/volumes/%s/expand" % (self.ssid,
|
||||||
self.volume_detail['id']),
|
self.volume_detail['id']),
|
||||||
data=json.dumps(volume_expand_req), headers=self._post_headers, method='POST',
|
data=json.dumps(volume_expand_req), headers=HEADERS, method='POST',
|
||||||
url_username=self.api_usr, url_password=self.api_pwd, validate_certs=self.validate_certs,
|
url_username=self.api_usr, url_password=self.api_pwd, validate_certs=self.validate_certs,
|
||||||
timeout=120)
|
timeout=120)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
Loading…
Reference in a new issue