Example #1
0
 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()
Example #2
0
	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)
Example #3
0
    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)
Example #4
0
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)
Example #5
0
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)
Example #7
0
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)