Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding ElementSW check Connection Module #43963

Merged
merged 2 commits into from
Aug 28, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
152 changes: 152 additions & 0 deletions lib/ansible/modules/storage/netapp/na_elementsw_check_connections.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
#!/usr/bin/python

# (c) 2018, NetApp, Inc
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

from __future__ import absolute_import, division, print_function
__metaclass__ = type


ANSIBLE_METADATA = {'metadata_version': '1.1',
'status': ['preview'],
'supported_by': 'community'}


DOCUMENTATION = '''

module: na_elementsw_check_connections

short_description: NetApp Element Software Check connectivity to MVIP and SVIP.
extends_documentation_fragment:
- netapp.solidfire
version_added: '2.7'
author: NetApp Ansible Team (ng-ansibleteam@netapp.com)
description:
- Used to test the management connection to the cluster.
- The test pings the MVIP and SVIP, and executes a simple API method to verify connectivity.

options:

skip:
description:
- Skip checking connection to SVIP or MVIP.
choices: ['svip', 'mvip']

mvip:
description:
- Optionally, use to test connection of a different MVIP.
- This is not needed to test the connection to the target cluster.

svip:
description:
- Optionally, use to test connection of a different SVIP.
- This is not needed to test the connection to the target cluster.

'''


EXAMPLES = """
- name: Check connections to MVIP and SVIP
na_elementsw_check_connections:
hostname: "{{ solidfire_hostname }}"
username: "{{ solidfire_username }}"
password: "{{ solidfire_password }}"
"""

RETURN = """

"""
import traceback

from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils._text import to_native
import ansible.module_utils.netapp as netapp_utils
from ansible.module_utils.netapp_module import NetAppModule


HAS_SF_SDK = netapp_utils.has_sf_sdk()


class NaElementSWConnection(object):

def __init__(self):
self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
self.argument_spec.update(dict(
skip=dict(required=False, type='str', default=None, choices=['mvip', 'svip']),
mvip=dict(required=False, type='str', default=None),
svip=dict(required=False, type='str', default=None)
))

self.module = AnsibleModule(
argument_spec=self.argument_spec,
required_if=[
('skip', 'svip', ['mvip']),
('skip', 'mvip', ['svip'])
],
supports_check_mode=True
)

self.na_helper = NetAppModule()
self.parameters = self.module.params.copy()
self.msg = ""

if HAS_SF_SDK is False:
self.module.fail_json(msg="Unable to import the ElementSW Python SDK")
else:
self.elem = netapp_utils.create_sf_connection(self.module, port=442)

def check_mvip_connection(self):
"""
Check connection to MVIP

:return: true if connection was successful, false otherwise.
:rtype: bool
"""
try:
test = self.elem.test_connect_mvip(mvip=self.parameters['mvip'])
# Todo - Log details about the test
return test.details.connected

except Exception as e:
self.msg += 'Error checking connection to MVIP: %s' % to_native(e)
return False

def check_svip_connection(self):
"""
Check connection to SVIP

:return: true if connection was successful, false otherwise.
:rtype: bool
"""
try:
test = self.elem.test_connect_svip(svip=self.parameters['svip'])
# Todo - Log details about the test
return test.details.connected
except Exception as e:
self.msg += 'Error checking connection to SVIP: %s' % to_native(e)
return False

def apply(self):
passed = False
if self.parameters.get('skip') is None:
# Set failed and msg
passed = self.check_mvip_connection()
# check if both connections have passed
passed &= self.check_svip_connection()
elif self.parameters['skip'] == 'mvip':
passed |= self.check_svip_connection()
elif self.parameters['skip'] == 'svip':
passed |= self.check_mvip_connection()
if not passed:
self.module.fail_json(msg=self.msg)
else:
self.module.exit_json()


def main():
connect_obj = NaElementSWConnection()
connect_obj.apply()


if __name__ == '__main__':
main()