Пример #1
0
def update_shelve(client_obj, shelf_serial, **kwargs):

    if utils.is_null_or_empty(shelf_serial):
        return (False, False, "Shelf update failed as no shelf id provided.",
                {})

    try:
        shelf_resp = client_obj.shelves.get()
        if utils.is_null_or_empty(shelf_resp):
            return (False, False,
                    f"Shelf serial '{shelf_serial}' is not present on array.",
                    {})
        else:
            # check if the given shelf serial is present on array
            if shelf_serial == shelf_resp.attrs.get("serial"):
                changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
                    shelf_resp, **kwargs)
                if changed_attrs_dict.__len__() > 0:
                    shelf_resp = client_obj.shelves.update(
                        id=shelf_resp.attrs.get("id"), **params)
                    return (True, True,
                            f"Successfully updated Shelf '{shelf_serial}'.",
                            shelf_resp.attrs)
                else:
                    return (True, False,
                            f"Shelf serial '{shelf_serial}' already updated.",
                            shelf_resp.attrs)
            else:
                return (False, False,
                        f"Shelf serial '{shelf_serial}' not found.", {})
    except Exception as e:
        return (False, False, "Shelf update failed | %s" % str(e), {})
Пример #2
0
def update_perf_policy(client_obj, perf_policy_resp, **kwargs):

    if utils.is_null_or_empty(perf_policy_resp):
        return (
            False, False,
            "Update performance policy failed. Performance policy name is not present.",
            {}, {})

    try:
        perf_policy_name = perf_policy_resp.attrs.get("name")
        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            perf_policy_resp, **kwargs)
        if changed_attrs_dict.__len__() > 0:
            perf_policy_resp = client_obj.performance_policies.update(
                id=perf_policy_resp.attrs.get("id"), **params)
            return (
                True, True,
                f"Performance policy '{perf_policy_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
                changed_attrs_dict, perf_policy_resp.attrs)
        else:
            return (
                True, False,
                f"Performance policy '{perf_policy_name}' already present in given state.",
                {}, perf_policy_resp.attrs)
    except Exception as ex:
        return (False, False, f"Performance policy update failed | {ex}", {},
                {})
Пример #3
0
def update_user(client_obj, user_name, **kwargs):

    if utils.is_null_or_empty(user_name):
        return (False, False, "Update user failed as user is not present.", {},
                {})

    try:
        user_resp = client_obj.users.get(id=None, name=user_name)
        if utils.is_null_or_empty(user_resp):
            return (
                False, False,
                f"User '{user_name}' cannot be updated as it is not present.",
                {}, {})

        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            user_resp, **kwargs)
        if changed_attrs_dict.__len__() > 0:
            user_resp = client_obj.users.update(id=user_resp.attrs.get("id"),
                                                **params)
            return (
                True, True,
                f"User '{user_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
                changed_attrs_dict, user_resp.attrs)
        else:
            return (
                True, False,
                f"User '{user_resp.attrs.get('name')}' already present in given state.",
                {}, user_resp.attrs)
    except Exception as ex:
        return (False, False, f"User update failed | {ex}", {}, {})
def update_snapshot(client_obj, snap_resp, **kwargs):

    if utils.is_null_or_empty(snap_resp):
        return (False, False,
                "Update snapshot failed as snapshot is not present.", {}, {})

    try:
        snapshot_name = snap_resp.attrs.get("name")
        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            snap_resp, **kwargs)
        if changed_attrs_dict.__len__() > 0:
            snap_resp = client_obj.snapshots.update(
                id=snap_resp.attrs.get("id"), **params)
            return (
                True, True,
                f"Snapshot '{snapshot_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
                changed_attrs_dict, snap_resp.attrs)
        else:
            return (
                True, False,
                f"Snapshot '{snapshot_name}' already present in given state.",
                {}, snap_resp.attrs)

    except Exception as ex:
        return (False, False, f"Snapshot update failed | {ex}", {}, {})
Пример #5
0
def update_volcoll(client_obj, volcoll_resp, **kwargs):

    if utils.is_null_or_empty(volcoll_resp):
        return (
            False, False,
            "Update volume collection failed as volume collection is not present.",
            {}, {})
    try:
        volcoll_name = volcoll_resp.attrs.get("name")
        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            volcoll_resp, **kwargs)
        if changed_attrs_dict.__len__() > 0:
            volcoll_resp = client_obj.volume_collections.update(
                id=volcoll_resp.attrs.get("id"), **params)
            return (
                True, True,
                f"Volume collection '{volcoll_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
                changed_attrs_dict, volcoll_resp.attrs)
        else:
            return (
                True, False,
                f"Volume collection '{volcoll_name}' already present in given state.",
                {}, volcoll_resp.attrs)
    except Exception as ex:
        return (False, False, f"Volume collection update failed | {ex}", {},
                {})
Пример #6
0
def group_encryption(client_obj, group_name, encryption_config):

    if utils.is_null_or_empty(group_name):
        return (
            False, False,
            "Encryption setting for group failed as group name is not present.",
            {}, {})

    try:
        group_resp = client_obj.groups.get(id=None, name=group_name)
        if utils.is_null_or_empty(group_resp):
            return (
                False, False,
                f"Encryption setting for group '{group_name}' cannot be done as it is not present.",
                {}, {})
        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            group_resp, encryption_config=encryption_config)
        if changed_attrs_dict.__len__() > 0:
            group_resp = client_obj.groups.update(
                id=group_resp.attrs.get("id"),
                encryption_config=encryption_config)
            return (
                True, True,
                f"Encryption setting for group '{group_name}' changed successfully. ",
                changed_attrs_dict, group_resp.attrs)
        else:
            return (
                True, False,
                f"Encryption setting for group '{group_resp.attrs.get('name')}' is already in same state.",
                {}, group_resp.attrs)
    except Exception as ex:
        return (False, False, f"Encryption setting for group failed |{ex}", {},
                {})
Пример #7
0
def update_master_key(client_obj, master_key, **kwargs):

    if utils.is_null_or_empty(master_key):
        return (False, False,
                "Update master key failed as master key is not present.", {},
                {})

    try:
        master_key_resp = client_obj.master_key.get(id=None, name=master_key)
        if utils.is_null_or_empty(master_key_resp):
            return (
                False, False,
                f"Master key '{master_key}' cannot be updated as it is not present.",
                {}, {})

        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            master_key_resp, **kwargs)
        changed_attrs_dict.pop('passphrase')
        if changed_attrs_dict.__len__() > 0:
            master_key_resp = client_obj.master_key.update(
                id=master_key_resp.attrs.get("id"), name=master_key, **params)
            return (
                True, True,
                f"Master key '{master_key}' already present. Modified the following attributes '{changed_attrs_dict}'",
                changed_attrs_dict, master_key_resp.attrs)
        else:
            return (
                True, False,
                f"Master key '{master_key}' already present in given state.",
                {}, master_key_resp.attrs)
    except Exception as ex:
        return (False, False, f"Master key update failed |{ex}", {}, {})
def update_group(client_obj, group_name, **kwargs):

    if utils.is_null_or_empty(group_name):
        return (False, False, "Update group failed as it is not present.", {},
                {})

    try:
        group_resp = client_obj.groups.get(id=None, name=group_name)
        if utils.is_null_or_empty(group_resp):
            return (
                False, False,
                f"Group '{group_name}' cannot be updated as it is not present.",
                {}, {})

        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            group_resp, **kwargs)
        if changed_attrs_dict.__len__() > 0:
            group_resp = client_obj.groups.update(
                id=group_resp.attrs.get("id"), **params)
            return (
                True, True,
                f"Group '{group_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
                changed_attrs_dict, group_resp.attrs)
        else:
            return (
                True, False,
                f"Group '{group_resp.attrs.get('name')}' already present in given state.",
                {}, group_resp.attrs)
    except Exception as ex:
        return (False, False, f"Group update failed | '{ex}'", {}, {})
Пример #9
0
def update_prot_template(client_obj, prot_template_resp, **kwargs):

    if utils.is_null_or_empty(prot_template_resp):
        return (
            False, False,
            "Update protection template failed as protection template is not present.",
            {}, {})
    try:
        prot_template_name = prot_template_resp.attrs.get("name")
        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            prot_template_resp, **kwargs)
        if changed_attrs_dict.__len__() > 0:
            prot_template_resp = client_obj.protection_templates.update(
                id=prot_template_resp.attrs.get("id"), **params)
            return (
                True, True,
                f"Protection template '{prot_template_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
                changed_attrs_dict, prot_template_resp.attrs)
        else:
            return (
                True, False,
                f"Protection template '{prot_template_name}' already present in given state.",
                {}, prot_template_resp.attrs)
    except Exception as ex:
        return (False, False, f"Protection template update failed | {ex}", {},
                {})
def update_volume(client_obj, vol_resp, **kwargs):

    if utils.is_null_or_empty(vol_resp):
        return (False, False, "Invalid volume to update.", {}, {})
    try:
        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            vol_resp, **kwargs)

        if 'volcoll_name' in kwargs:
            if kwargs['volcoll_name'] == "" and vol_resp.attrs.get(
                    'volcoll_id') != "":
                params['volcoll_id'] = ""
                changed_attrs_dict['volcoll_id'] = ""
            else:
                if 'volcoll_name' in params:
                    params.pop('volcoll_name')
                    changed_attrs_dict.pop('volcoll_name')

        if changed_attrs_dict.__len__() > 0:
            resp = client_obj.volumes.update(id=vol_resp.attrs.get("id"),
                                             **params)
            return (
                True, True,
                f"Volume '{vol_resp.attrs.get('name')}' already present. Modified the following attributes '{changed_attrs_dict}'",
                changed_attrs_dict, resp.attrs)
        else:
            return (
                True, False,
                f"Volume '{vol_resp.attrs.get('name')}' already present in given state.",
                {}, vol_resp.attrs)
    except Exception as ex:
        return (False, False, f"Volume update failed '{ex}'", {}, {})
Пример #11
0
def create_acr(client_obj, state, initiator_group, volume, **kwargs):

    if utils.is_null_or_empty(initiator_group):
        return (
            False, False,
            "Access control record creation failed. No initiator group provided.",
            {})
    if utils.is_null_or_empty(volume):
        return (
            False, False,
            "Access control record creation failed. No volume name provided.",
            {})

    try:
        # see if the igroup is already present
        ig_resp = client_obj.initiator_groups.get(id=None,
                                                  name=initiator_group)
        if ig_resp is None:
            return (
                False, False,
                f"Initiator Group '{initiator_group}' is not present on array.",
                {})
        vol_resp = client_obj.volumes.get(id=None, name=volume)
        if vol_resp is None:
            return (False, False,
                    f"Volume name '{volume}' is not present on array.", {})

        acr_resp = client_obj.access_control_records.get(
            vol_name=volume,
            initiator_group_name=initiator_group,
            apply_to=kwargs['apply_to'])
        if utils.is_null_or_empty(acr_resp) is False:
            changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
                acr_resp, **kwargs)
        else:
            params = utils.remove_null_args(**kwargs)
        if acr_resp is None or changed_attrs_dict.__len__() > 0:
            acr_resp = client_obj.access_control_records.create(
                initiator_group_id=ig_resp.attrs.get("id"),
                vol_id=vol_resp.attrs.get("id"),
                **params)
            # params['volume'] = volume
            # params['initiator_group'] = initiator_group
            return (True, True, "Successfully created access control record.",
                    acr_resp.attrs)
        else:
            # if state is set to present, we pass
            if state == "present":
                return (
                    True, False,
                    f"Access control record for volume '{volume}' with initiator group '{initiator_group}' is already present.",
                    acr_resp.attrs)
        return (
            False, False,
            f"Access control record for volume '{volume}' with initiator group '{initiator_group}' cannot "
            "be created as it is already present.", {})
    except Exception as ex:
        return (False, False, f"Access control record creation failed | {ex}",
                {})
def update_fc_interface(client_obj, array_name_or_serial, fc_name, controller,
                        online):

    if utils.is_null_or_empty(array_name_or_serial):
        return (
            False, False,
            "Fibre channel interface update failed as no array name is provided.",
            {}, {})
    if utils.is_null_or_empty(fc_name):
        return (
            False, False,
            "Fibre channel interface update failed as no interface name is provided.",
            {}, {})
    if utils.is_null_or_empty(controller):
        return (
            False, False,
            "Fibre channel interface update failed as no controller name is provided.",
            {}, {})
    if utils.is_null_or_empty(online):
        return (
            False, False,
            "Fibre channel interface update failed as online flag is not provided.",
            {}, {})
    try:
        # get the details of the fc
        fc_resp = client_obj.fibre_channel_interfaces.list(
            detail=True, array_name_or_serial=array_name_or_serial)
        if fc_resp is None:
            return (
                False, False,
                f"No fibre channel is present for array '{array_name_or_serial}'.",
                {}, {})
        else:
            fc_result = None
            for fc_interface_obj in fc_resp:
                if fc_interface_obj.attrs.get(
                        "name") == fc_name and fc_interface_obj.attrs.get(
                            "controller_name") == controller:
                    fc_result = fc_interface_obj
                    break
            if fc_result is not None:
                changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
                    fc_result, online=online)
                if changed_attrs_dict.__len__() > 0:
                    fc_result = client_obj.fibre_channel_interfaces.update(
                        id=fc_result.attrs.get("id"), online=online)
                    if hasattr(fc_result, 'attrs'):
                        fc_result = fc_result.attrs
                    return (True, True, "Updated fibre channel interface.", {},
                            fc_result)
                else:
                    if hasattr(fc_result, 'attrs'):
                        fc_result = fc_result.attrs
                    return (True, False,
                            "Fibre channel interface already in given state.",
                            {}, fc_result)
    except Exception as ex:
        return (False, False, f"Fibre channel update failed |'{ex}'", {}, {})
Пример #13
0
def create_update_network_config(client_obj, name, state,
                                 iscsi_automatic_connection_method,
                                 iscsi_connection_rebalancing, mgmt_ip,
                                 change_name, **kwargs):

    if utils.is_null_or_empty(name):
        return (False, False,
                "Create network config failed as name is not present.", {}, {})

    try:
        network_resp = client_obj.network_configs.get(id=None, name=name)
        if utils.is_null_or_empty(network_resp):
            params = utils.remove_null_args(**kwargs)
            network_resp = client_obj.network_configs.create(
                name=name,
                iscsi_automatic_connection_method=
                iscsi_automatic_connection_method,
                iscsi_connection_rebalancing=iscsi_connection_rebalancing,
                mgmt_ip=mgmt_ip,
                **params)
            return (True, True,
                    f"Network config '{name}' created successfully.", {},
                    network_resp.attrs)
        else:
            if state == "create":
                return (
                    False, False,
                    f"Network config '{name}' cannot be created as it is already present in given state.",
                    {}, network_resp.attrs)

            # update case
            kwargs['name'] = change_name
            changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
                network_resp, **kwargs)
            # even though some of the attributes have not changed but it still has to be passed in case of update.
            params = utils.remove_null_args(**kwargs)
            if changed_attrs_dict.__len__() > 0:
                network_resp = client_obj.network_configs.update(
                    id=network_resp.attrs.get("id"),
                    name=name,
                    iscsi_automatic_connection_method=
                    iscsi_automatic_connection_method,
                    iscsi_connection_rebalancing=iscsi_connection_rebalancing,
                    mgmt_ip=mgmt_ip,
                    **params)
                return (
                    True, True,
                    f"Network config '{name}' already present. Modified the following attributes '{changed_attrs_dict}'",
                    changed_attrs_dict, network_resp.attrs)
            else:
                return (
                    True, False,
                    f"Network config '{network_resp.attrs.get('name')}' already present in given state.",
                    {}, network_resp.attrs)
    except Exception as ex:
        return (False, False, f"Network config creation failed |'{ex}'", {},
                {})
def create_acr(client_obj, initiator_group, volume, state, **kwargs):

    if utils.is_null_or_empty(initiator_group):
        return (
            False, False,
            "Access control record creation failed. No initiator group provided."
        )
    if utils.is_null_or_empty(volume):
        return (
            False, False,
            "Access control record creation failed. No volume name provided.")

    try:
        # see if the igroup is already present
        ig_resp = client_obj.initiator_groups.get(id=None,
                                                  name=initiator_group)
        if ig_resp is None:
            return (
                False, False,
                f"Initiator Group '{initiator_group}' is not present on array."
            )
        vol_resp = client_obj.volumes.get(id=None, name=volume)
        if vol_resp is None:
            return (False, False,
                    f"Volume name '{volume}' is not present on array.")

        acr_resp = client_obj.access_control_records.get(id=None,
                                                         vol_name=volume)
        if utils.is_null_or_empty(acr_resp) is False:
            changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
                acr_resp, **kwargs)
        else:
            params = utils.remove_null_args(**kwargs)
        if acr_resp is None or acr_resp.attrs.get(
                "initiator_group_id") != ig_resp.attrs.get("id"):
            acr_resp = client_obj.access_control_records.create(
                initiator_group_id=ig_resp.attrs.get("id"),
                vol_id=vol_resp.attrs.get("id"),
                **params)
            return (
                True, True,
                f"Successfully created access control record for volume '{volume}'."
            )
        else:
            # check the state. if it is set to present ,we pass else if it is 'create' then we will fail
            if state == "present":
                return (
                    True, False,
                    f"Access control record is already present for volume '{volume}'."
                )
        return (
            False, False,
            f"Access control record for volume '{volume}' cannot be created as it is already present."
        )
    except Exception as ex:
        return (False, False, f"Access control record creation failed | {ex}")
Пример #15
0
def update_volume(client_obj, vol_resp, **kwargs):

    if utils.is_null_or_empty(vol_resp):
        return (False, False, "Invalid volume to update.", {})
    try:
        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            vol_resp, **kwargs)

        if changed_attrs_dict.__len__() > 0:
            client_obj.volumes.update(id=vol_resp.attrs.get("id"), **params)
            return (
                True, True,
                f"Volume '{vol_resp.attrs.get('name')}' already present. Modified the following fields:",
                changed_attrs_dict)
        else:
            return (True, False,
                    f"Volume '{vol_resp.attrs.get('name')}' already present.",
                    {})
    except Exception as ex:
        return (False, False, f"Volume update failed '{ex}'", {})
def update_user_policy(client_obj, **kwargs):

    try:
        user_resp = client_obj.user_policies.get()
        if utils.is_null_or_empty(user_resp):
            return (False, False, "User policy is not present on Array", {},
                    {})

        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            user_resp, **kwargs)
        if changed_attrs_dict.__len__() > 0:
            user_resp = client_obj.user_policies.update(
                id=user_resp.attrs.get("id"), **params)
            return (
                True, True,
                f"Updated user policy successfully with following attributes '{changed_attrs_dict}'.",
                changed_attrs_dict, user_resp.attrs)
        else:
            return (True, False, "User Policy already present in given state.",
                    {}, user_resp.attrs)
    except Exception as ex:
        return (False, False, f"User Policy Update failed | {ex}", {}, {})
Пример #17
0
def update_partner(
        client_obj,
        downstream_hostname,  # downstream
        secret,
        **kwargs):

    if utils.is_null_or_empty(downstream_hostname):
        return (
            False, False,
            "Update replication partner failed as no downstream partner is provided.",
            {}, {})

    try:
        upstream_repl_resp = client_obj.replication_partners.get(
            id=None, hostname=downstream_hostname)
        if utils.is_null_or_empty(upstream_repl_resp):
            return (
                False, False,
                f"Replication partner '{downstream_hostname}' cannot be updated as it is not present.",
                {}, {})

        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            upstream_repl_resp, **kwargs)
        if changed_attrs_dict.__len__() > 0:
            upstream_repl_resp = client_obj.replication_partners.update(
                id=upstream_repl_resp.attrs.get("id"), secret=secret, **params)
            return (
                True, True,
                f"Replication partner '{downstream_hostname}' already present. Modified the following attributes '{changed_attrs_dict}'",
                changed_attrs_dict, upstream_repl_resp.attrs)
        else:
            return (
                True, False,
                f"Replication partner '{upstream_repl_resp.attrs.get('name')}' already present in given state.",
                {}, upstream_repl_resp.attrs)
    except Exception as ex:
        return (False, False, f"Replication partner update failed |{ex}", {},
                {})
Пример #18
0
def update_igroup(client_obj, ig_resp, **kwargs):

    if utils.is_null_or_empty(ig_resp):
        return (False, False,
                "Update initiator group failed as it is not present.", {}, {})
    try:
        ig_name = ig_resp.attrs.get("name")
        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            ig_resp, **kwargs)
        if changed_attrs_dict.__len__() > 0:
            ig_resp = client_obj.initiator_groups.update(
                id=ig_resp.attrs.get("id"), **params)
            return (
                True, True,
                f"Initiator group '{ig_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
                changed_attrs_dict, ig_resp.attrs)
        else:
            return (
                True, False,
                f"Initiator group '{ig_name}' already present in given state.",
                {}, ig_resp.attrs)
    except Exception as ex:
        return (False, False, f"Initiator group update failed | {ex}", {}, {})
Пример #19
0
def update_array(client_obj, array_resp, **kwargs):

    if utils.is_null_or_empty(array_resp):
        return (False, False,
                "Update array failed as array name is not present.", {}, {})

    try:
        array_name = array_resp.attrs.get("name")
        changed_attrs_dict, params = utils.remove_unchanged_or_null_args(
            array_resp, **kwargs)
        if changed_attrs_dict.__len__() > 0:
            array_resp = client_obj.arrays.update(
                id=array_resp.attrs.get("id"), **params)
            return (
                True, True,
                f"Array '{array_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
                changed_attrs_dict, array_resp.attrs)
        else:
            return (True, False,
                    f"Array '{array_name}' already present in given state.",
                    {}, array_resp.attrs)

    except Exception as ex:
        return (False, False, f"Array update failed |{ex}", {}, {})