def setUp(self): krest.EndPoint.RetryCfg.not_reachable_timeout = not_reachable_timeout krest.EndPoint.RetryCfg.not_reachable_pause = not_reachable_pause self.ep = krest.EndPoint(KREST_HOST, KREST_USER, KREST_PASSWORD, ssl_validate=False) self.system_state = self.ep.get("system/state", 1) self.to_clean = list()
def __init__(self, ipaddr, username='******', password='******'): """ Class constructor """ self.username = username self.password = password self.ipaddr = ipaddr print "--- Getting connected to the system... ---" self.endpoint = krest.EndPoint(self.ipaddr, self.username, self.password, ssl_validate=False) print "\tConnected to ip:%s as %s" % (self.ipaddr, self.username)
def test_validate_endpoints(self): """Test that endpoint validation works properly""" self.assertRaises(ValueError, self.ep.new, "asdfasdf", name=1) ep = krest.EndPoint(KREST_HOST, KREST_USER, KREST_PASSWORD, ssl_validate=False, autodiscover=False, validate_endpoints=False) try: ep.new("blah", name=1) except ValueError: self.fail( "Failed to create object on non-existing endpoint, although validate_endpoints=False" ) hg = ep.new("host_groups", name="unittest_hg1").save() self.to_clean.append(hg)
def main(): module_args = dict(hostname=dict(type='str', required=True), volumename=dict(type='str', required=True), remove=dict(type='bool', required=False)) module = AnsibleModule(argument_spec=module_args) # store the params as a reference hashtable for use later as vars["value"] vars = module.params # temp username, password, server vars sdpuser = os.environ.get('SDPUSER', '-1') sdppass = os.environ.get('SDPPASS', '-1') sdphost = os.environ.get('SDPHOST', '-1') # KREST Check, fail if no module. if not krestload: module.fail_json( msg= 'The krest module is required for this module (pip install krest).' ) # Connect to server try: sdp = krest.EndPoint(sdphost, sdpuser, sdppass, ssl_validate=False) except Exception as error: module.fail_json(msg=str(error)) # ----- Below here is specific endpoint ops ------ # Create the volume object (do not save yet) obj_request = sdp.new(sdpclass) # Store the volume volreqclass = "volumes" vols = sdp.search(volreqclass, name=vars["volumename"]) # Store the host hostreqclass = "hosts" hosts = sdp.search(hostreqclass, name=vars["hostname"]) if len(vols.hits) == 1: vol = vols.hits[0] obj_request.volume = vol else: error = "Volume {} was not found.".format(vars["volumename"]) module.fail_json(msg=str(error)) if len(hosts.hits) == 1: host = hosts.hits[0] obj_request.host = host else: error = "Host {} was not found.".format(vars["hostname"]) module.fail_json(msg=str(error)) find = sdp.search(sdpclass, __limit=9999) for f in find.hits: if f.host.id == host.id and f.volume.id == vol.id: sdpobj = f break # Since python can't simply test if a var exists... try: sdpobj except NameError: sdpobj = None # Custom removal since the query for sdpobj is so fubar if vars["remove"] == True: if sdpobj == None: module.exit_json(changed=False, removed=False) elif sdpobj != None: sdpobj.delete() module.exit_json(changed=True, removed=True, id=sdpobj.id) # If it does not, then save the above object as is. if sdpobj is None: try: result = obj_request.save() except Exception as error: module.fail_json(msg=str(error)) changed = True else: result = sdpobj changed = False # ------ No further change operations beyond this point. ------ # Once saved, invoke a find operation for the just-created object and use that to respond. find = sdp.search(sdpclass, id=result.id) sdpobj = find.hits[0] if len(find.hits) == 1: response = {} response["id"] = sdpobj.id response["hostname"] = sdpobj.host.name response["volume"] = sdpobj.volume.name module.exit_json(changed=changed, meta=response)
def main(): module_args = dict(name=dict(type='str', required=True), volumegroup=dict(type='str', required=True), retentionpolicy=dict(type='str', required=True), exposable=dict(type='bool', required=False, default=True), deletable=dict(type='bool', required=False, defaul=True), remove=dict(type='bool', required=False)) module = AnsibleModule(argument_spec=module_args) # store the params as a reference hashtable for use later as vars["value"] vars = module.params # temp username, password, server vars sdpuser = os.environ.get('SDPUSER', '-1') sdppass = os.environ.get('SDPPASS', '-1') sdphost = os.environ.get('SDPHOST', '-1') # KREST Check, fail if no module. if not krestload: module.fail_json( msg= 'The krest module is required for this module (pip install krest).' ) # Connect to server try: sdp = krest.EndPoint(sdphost, sdpuser, sdppass, ssl_validate=False) except Exception as error: module.fail_json(msg=str(error)) # ----- Below here is specific endpoint ops ------ # Create the object (do not save yet) # Set up all of the object data # Snapshot name (for searching) finalsnapname = vars["volumegroup"] + ':' + vars["name"] obj_request = sdp.new(sdpclass) obj_request.short_name = vars["name"] # vg vgsearch = sdp.search('volume_groups', name=vars["volumegroup"]) if vgsearch.total == 1: vg = vgsearch.hits[0] elif vgsearch.total == 0: errormessage = "The volume group does not exist" module.fail_json(msg=str(errormessage)) obj_request.source = vg # rp rpsearch = sdp.search('retention_policies', name=vars["retentionpolicy"]) if rpsearch.total == 1: rp = rpsearch.hits[0] elif rpsearch.total == 0: errormessage = "The retntion policy does not exist" module.fail_json(msg=str(errormessage)) obj_request.retention_policy = rp # Set up the retention policy vars["retentionpolicy"] # Check to see if object already exists. find = sdp.search(sdpclass, name=finalsnapname) if vars["remove"] == True: if len(find.hits) == 1: sdpobj = find.hits[0] sdpobj.delete() module.exit_json(changed=True, removed=True, id=sdpobj.id) else: module.exit_json(changed=False, removed=False) # If it does not, then save the above object as is. if len(find.hits) == 0: try: obj_request.save() changed = True except Exception as error: module.fail_json(msg=str(error)) else: changed = False # Otherwise, check the current object's secondary parameters against the request, and adjust as needed. # ------ No further change operations beyond this point. ------ # Once saved, invoke a find operation for the just-created object and use that to respond. find = sdp.search(sdpclass, name=finalsnapname) sdpobj = find.hits[0] if len(find.hits) == 1: response = {} response["id"] = sdpobj.id response["name"] = sdpobj.name response["retentionpolicy"] = sdpobj.retention_policy.name response["deletable"] = sdpobj.is_auto_deleteable response["exposable"] = sdpobj.is_exposable module.exit_json(changed=changed, meta=response)
def main(): module_args = dict(name=dict(type='str', required=True), snapshots=dict(type='int', required=False, default=0), weeks=dict(type='int', required=False, default=0), days=dict(type='int', required=False, default=0), hours=dict(type='int', required=False, default=0), remove=dict(type='bool', required=False)) module = AnsibleModule(argument_spec=module_args) # store the params as a reference hashtable for use later as vars["value"] vars = module.params # temp username, password, server vars sdpuser = os.environ.get('SDPUSER', '-1') sdppass = os.environ.get('SDPPASS', '-1') sdphost = os.environ.get('SDPHOST', '-1') # KREST Check, fail if no module. if not krestload: module.fail_json( msg= 'The krest module is required for this module (pip install krest).' ) # Connect to server try: sdp = krest.EndPoint(sdphost, sdpuser, sdppass, ssl_validate=False) except Exception as error: module.fail_json(msg=str(error)) # ----- Below here is specific endpoint ops ------ # Create the volume object (do not save yet) obj_request = sdp.new(sdpclass) obj_request.name = vars["name"] obj_request.num_snapshots = vars["snapshots"] obj_request.weeks = vars["weeks"] obj_request.days = vars["days"] obj_request.hours = vars["hours"] # Check to see if object already exists. find = sdp.search(sdpclass, name=obj_request.name) if vars["remove"] == True: if len(find.hits) == 1: sdpobj = find.hits[0] sdpobj.delete() module.exit_json(changed=True, removed=True, id=sdpobj.id) else: module.exit_json(changed=False, removed=False) # If it does not, then save the above object as is. if len(find.hits) == 0: try: sdpobj = obj_request.save() except Exception as error: module.fail_json(msg=str(error)) changed = True # Otherwise, check the current object's secondary parameters against the request, and adjust as needed. else: sdpobj = find.hits[0] if vars["snapshots"]: if sdpobj.num_snapshots != vars["snapshots"]: sdpobj.num_snapshots = vars["snapshots"] try: sdpobj.save() except Exception as error: module.fail_json(msg=str(error)) changed = True else: changed = False if vars["weeks"]: if sdpobj.weeks != vars["weeks"]: sdpobj.weeks = vars["weeks"] try: sdpobj.save() except Exception as error: module.fail_json(msg=str(error)) changed = True else: changed = False if vars["days"]: if sdpobj.days != vars["days"]: sdpobj.days = vars["days"] try: sdpobj.save() except Exception as error: module.fail_json(msg=str(error)) changed = True else: changed = False if vars["hours"]: if sdpobj.hours != vars["hours"]: sdpobj.hours = vars["hours"] try: sdpobj.save() except Exception as error: module.fail_json(msg=str(error)) changed = True else: changed = False # ------ No further change operations beyond this point. ------ # Once saved, invoke a find operation for the just-created object and use that to respond. find = sdp.search(sdpclass, name=obj_request.name) sdpobj = find.hits[0] if len(find.hits) == 1: response = {} response["id"] = sdpobj.id response["name"] = sdpobj.name response["snapshots"] = sdpobj.num_snapshots response["weeks"] = sdpobj.weeks response["days"] = sdpobj.days response["hours"] = sdpobj.hours module.exit_json(changed=changed, meta=response)
def main(): module_args = dict(name=dict(type='str', required=True), type=dict(type='str', required=True), iqn=dict(type='str', required=False), pwwn=dict(type='list', required=False), hostgroup=dict(type='str', required=False), remove=dict(type='bool', required=False)) module = AnsibleModule(argument_spec=module_args) # store the params as a reference hashtable for use later as vars["value"] vars = module.params # temp username, password, server vars sdpuser = os.environ.get('SDPUSER', '-1') sdppass = os.environ.get('SDPPASS', '-1') sdphost = os.environ.get('SDPHOST', '-1') # KREST Check, fail if no module. if not krestload: module.fail_json( msg= 'The krest module is required for this module (pip install krest).' ) # Connect to server try: sdp = krest.EndPoint(sdphost, sdpuser, sdppass, ssl_validate=False) except Exception as error: module.fail_json(msg=str(error)) # ----- Below here is specific endpoint ops ------ # Create the host object (do not save yet) obj_request = sdp.new(sdpclass) obj_request.name = vars["name"] obj_request.type = vars["type"] # Check to see if object already exists. find = sdp.search(sdpclass, name=obj_request.name) if vars["remove"] == True: if len(find.hits) == 1: sdpobj = find.hits[0] sdpobj.delete() module.exit_json(changed=True, removed=True, id=sdpobj.id) else: module.exit_json(changed=False, removed=False) # If it does not, then save the above object as is. if len(find.hits) == 0: try: sdpobj = obj_request.save() except Exception as error: module.fail_json(msg=str(error)) changed = True else: sdpobj = find.hits[0] changed = False # Check variables that may change here (size, group membership, etc) if vars["hostgroup"]: find = sdp.search(sdpclass, name=obj_request.name) sdpobj = find.hits[0] findhg = sdp.search("host_groups", name=vars["hostgroup"]) if len(findhg.hits) == 1: hg = findhg.hits[0] if sdpobj.host_group: if sdpobj.host_group.name == vars["hostgroup"]: changed = False else: sdpobj.host_group = hg sdpobj.save() changed = True else: sdpobj.host_group = hg sdpobj.save() changed = True elif sdpobj.host_group: sdpobj.host_group = "" sdpobj.save() changed = True if vars["pwwn"]: portclass = "host_fc_ports" for i in vars["pwwn"]: findports = sdp.search(portclass, pwwn__in=i) if len(findports.hits) == 0: port_request = sdp.new(portclass) port_request.pwwn = i port_request.host = sdpobj port_request.save() changed = True else: portobj = findports.hits[0] if portobj.host != sdpobj: portobj.host = sdpobj portobj.save() changed = True else: changed = False if vars["iqn"]: iqn = vars["iqn"] portclass = "host_iqns" findports = sdp.search(portclass, pwwn__in=iqn) if len(findports.hits) == 0: port_request = sdp.new(portclass) port_request.iqn = iqn port_request.host = sdpobj port_request.save() changed = True else: portobj = findports.hits[0] if portobj.host != sdpobj: portobj.host = sdpobj portobj.save() changed = True else: changed = False # ------ No further change operations beyond this point. ------ # Once saved, invoke a find operation for the just-created object and use that to respond. find = sdp.search(sdpclass, name=obj_request.name) sdpobj = find.hits[0] if len(find.hits) == 1: response = {} response["id"] = sdpobj.id response["name"] = sdpobj.name if vars["hostgroup"]: response["hostgroup"] = sdpobj.host_group.name else: response["hostgroup"] = "" if vars["pwwn"]: response["pwwn"] = vars["pwwn"] if vars["iqn"]: response["iqn"] = vars["iqn"] module.exit_json(changed=changed, meta=response)