コード例 #1
0
    def get_job_details(self, job_id):
        """
        Get the details of the SyncIQ job.
        :param job_id: Specifies the id or name of the policy job
        :return: if exists returns details of the SyncIQ job
        else returns None.
        """
        try:
            api_response = \
                self.sync_api_instance.list_sync_jobs().jobs
            jobs = [job.to_dict() for job in api_response if job.id == job_id]
            return jobs
        except utils.ApiException as e:
            if str(e.status) == '404':
                error_message = "SyncIQ job %s details are not " \
                                "found" % (job_id)
                LOG.info(error_message)
                return None

            error_message = 'Get details of SyncIQ job %s failed with ' \
                            'error: %s' % (job_id, utils.determine_error
                                           (error_obj=e))
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
        except Exception as e:
            error_message = 'Get details of SyncIQ job %s failed with ' \
                            'error: %s' % (job_id, utils.determine_error
                                           (error_obj=e))
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #2
0
    def get_ldap_details(self, ldap_name):
        """
        Get the details of the LDAP provider.
        :param ldap_name: Specifies the LDAP provider name.
        :return: if exists returns details of the LDAP provider
        else returns None.
        """
        try:
            api_response = self.auth_api_instance.get_providers_ldap_by_id(
                ldap_name)
            return api_response.ldap[0].to_dict()
        except utils.ApiException as e:
            if str(e.status) == '404':
                error_message = "LDAP provider {0} details are not found".\
                    format(ldap_name)
                LOG.info(error_message)
                return None

            error_message = 'Get details of LDAP provider {0} failed with ' \
                            'error: {1}'.format(ldap_name,
                                                utils.determine_error
                                                (error_obj=e))
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
        except Exception as e:
            error_message = 'Get details of LDAP provider {0} failed with ' \
                            'error: {1}'.format(ldap_name,
                                                utils.determine_error
                                                (error_obj=e))
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #3
0
    def get_network_rule(self, groupnet, subnet, pool, rule):
        """
        Get configuration details for a specific rule
        """
        rule_details = {}

        try:
            current_rule_details = self.network_api_instance.get_pools_pool_rule(rule,
                                                                                 groupnet,
                                                                                 subnet,
                                                                                 pool)
            current_rule_details = current_rule_details.to_dict()
            rule_details.update(current_rule_details['rules'][0])
        except utils.ApiException as e:
            if str(e.status) == "404":
                error_message = "Details of Network rule %s are not found" % rule
                LOG.info(error_message)
                return None

            else:
                error_msg = utils.determine_error(error_obj=e)
                error_message = 'Unable to retrieve details of rule %s. ' \
                                'failed with error: %s' % (rule, str(error_msg))
                LOG.error(error_message)
                self.module.fail_json(msg=error_message)

        except Exception as e:
            error_msg = utils.determine_error(error_obj=e)
            error_message = 'Unable to retrieve details of rule %s. ' \
                            'failed with error: %s' % (rule, str(error_msg))
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)

        return rule_details
コード例 #4
0
    def get_groupnet_details(self, groupnet_name):
        """
        Get the details of the groupnet.
        :param groupnet_name: Specifies the groupnet name.
        :return: If exists returns details of the groupnet
        else returns None.
        """
        try:
            api_response = \
                self.network_api.get_network_groupnet(groupnet_name).to_dict()
            if api_response:
                api_response = api_response['groupnets'][0]

            return api_response
        except utils.ApiException as e:
            if str(e.status) == '404':
                error_message = "Groupnet %s details are not found"\
                    % groupnet_name
                LOG.info(error_message)
                return []

            error_msg = utils.determine_error(error_obj=e)
            error_message = 'Getting details of groupnet %s ' \
                            'failed with error: %s' % (groupnet_name,
                                                       str(error_msg))
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
        except Exception as e:
            error_msg = utils.determine_error(error_obj=e)
            error_message = 'Getting details of groupnet %s ' \
                            'failed with error: %s' % (groupnet_name,
                                                       str(error_msg))
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #5
0
    def get_ads_details(self, ads_name):
        """
        Get the details of the Active Directory provider.
        :param ads_name: Specifies the Active Directory provider name.
        :return: if exists returns details of the Active Directory provider
        else returns None.
        """
        try:
            ads_api_response = []
            for name in ads_name:
                api_response = self.auth_api_instance.get_providers_ads_by_id(
                    name)
                ads_api_response.append(api_response.ads[0].to_dict())

            return ads_api_response
        except utils.ApiException as e:
            if str(e.status) == '404':
                error_message = "ADS provider {0} details are not found".\
                    format(ads_name)
                LOG.info(error_message)
                return None
            else:
                error_message = 'Get details of ADS provider {0} failed with ' \
                                'error: {1}'.format(ads_name,
                                                    utils.determine_error
                                                    (error_obj=e))
                LOG.error(error_message)
                self.module.fail_json(msg=error_message)
        except Exception as e:
            error_message = 'Get details of ADS provider {0} failed with ' \
                            'error: {1}'.format(ads_name,
                                                utils.determine_error
                                                (error_obj=e))
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #6
0
    def update(self, ldap_name, modified_ldap):
        """
         Modify the details of the LDAP provider.
        :param ldap_name: Specifies the LDAP provider name.
        :param modified_ldap: Parameters to modify.
        :return: True if the operation is successful.
        """
        ldap_update_params = {}

        try:
            for key in modified_ldap:
                ldap_update_params[key] = modified_ldap[key]

            ldap_provider_params = utils.isi_sdk.ProvidersLdapIdParams(
                **ldap_update_params)

            self.auth_api_instance.update_providers_ldap_by_id(
                providers_ldap_id_params=ldap_provider_params,
                providers_ldap_id=ldap_name)
            message = "LDAP provider updated successfully."
            LOG.info(message)
            return True
        except utils.ApiException as e:
            error_message = "Modifying LDAP provider failed with" + \
                utils.determine_error(error_obj=e)
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #7
0
    def update(self, ads_name, modified_ads, domain, instance):
        """
         Modify the details of the Active Directory provider.
        :param ads_name: Specifies the Active Directory provider name.
        :param modified_ads: Parameters to modify.
        :param domain: Specifies the Active Directory provider name.
        :param instance: Specifies Active Directory provider instance.
        :return: True if the operation is successful.
        """
        ads_update_params = {}

        try:
            for key in modified_ads:
                ads_update_params[key] = modified_ads[key]

            ads_provider_params = utils.isi_sdk.ProvidersAdsIdParams(
                **ads_update_params)

            self.auth_api_instance.update_providers_ads_by_id(
                providers_ads_id_params=ads_provider_params,
                providers_ads_id=ads_name)
            message = "ADS provider updated successfully."
            LOG.info(message)
            return True
        except utils.ApiException as e:
            error_message = "Modifying ADS provider failed with" + \
                utils.determine_error(error_obj=e)
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #8
0
 def get_attributes_list(self):
     """Get the list of attributes of a given PowerScale Storage"""
     try:
         config = (self.cluster_api.get_cluster_config()).to_dict()
         ips = self.cluster_api.get_cluster_external_ips()
         external_ip_str = ','.join(ips)
         external_ips = {"External IPs": external_ip_str}
         logon_msg = (self.cluster_api.get_cluster_identity()).to_dict()
         contact_info = (self.cluster_api.get_cluster_owner()).to_dict()
         cluster_version = (self.cluster_api.get_cluster_version())\
             .to_dict()
         attribute = {
             "Config": config,
             "Contact_Info": contact_info,
             "External_IP": external_ips,
             "Logon_msg": logon_msg,
             "Cluster_Version": cluster_version
         }
         LOG.info("Got Attributes of PowerScale cluster %s",
                  self.module.params['onefs_host'])
         return attribute
     except Exception as e:
         error_msg = (
             'Get Attributes List for PowerScale cluster: {0} failed'
             ' with error: {1}'.format(self.module.params['onefs_host'],
                                       utils.determine_error(e)))
         LOG.error(error_msg)
         self.module.fail_json(msg=error_msg)
コード例 #9
0
 def create_network_rule(self, groupnet, subnet, pool, rule_details):
     """
     Create a network rule
     """
     name = rule_details['name']
     try:
         create_params = utils.isi_sdk.PoolsPoolRule(**rule_details)
         self.network_api_instance.create_pools_pool_rule(pools_pool_rule=create_params,
                                                          groupnet=groupnet,
                                                          subnet=subnet,
                                                          pool=pool)
     except ValueError as e:
         # On successful creation of network provisioning rule
         # the isi_sdk raises an exception
         # when trying to extract the id from an empty response.
         # Adding except clause to suppress this exception
         # as a workaround.
         if e.args[0] != "Invalid value for `id`, must not be `None`":
             raise e
     except Exception as e:
         error_msg = utils.determine_error(error_obj=e)
         error_message = 'Unable to create network rule %s. ' \
                         'failed with error: %s' % (name, str(error_msg))
         LOG.error(error_message)
         self.module.fail_json(msg=error_message)
コード例 #10
0
 def get_synciq_performance_rules(self):
     """Get the list of SyncIQ performance rules of a given PowerScale Storage"""
     try:
         synciq_performance_rule_list = []
         synciq_performance_rule_details = (
             self.synciq_api.list_sync_rules()).to_dict()
         for rule in synciq_performance_rule_details['rules']:
             synciq_performance_rule_dict = {
                 "id": rule['id'],
                 "schedule": rule['schedule'],
                 "enabled": rule['enabled'],
                 "type": rule['type'],
                 "limit": get_sync_rule_limit_unit(rule['limit'],
                                                   rule['type'])
             }
             synciq_performance_rule_list.append(
                 synciq_performance_rule_dict)
         return synciq_performance_rule_list
     except Exception as e:
         error_msg = (
             'Get SyncIQ performance rules list for PowerScale cluster: %s failed with'
             'error: %s' %
             (self.module.params['onefs_host'], utils.determine_error(e)))
         LOG.error(error_msg)
         self.module.fail_json(msg=error_msg)
コード例 #11
0
 def get_syniq_policies_list(self):
     """Get the list of SyncIQ policies of a given PowerScale Storage"""
     try:
         policies_list = []
         policies_details = (self.synciq_api.list_sync_policies()).to_dict()
         policies = policies_details['policies']
         if policies:
             for policy in policies:
                 policies_list.append({
                     "name":
                     policy['name'],
                     "id":
                     policy['id'],
                     "source_root_path":
                     policy['source_root_path'],
                     "target_path":
                     policy['target_path'],
                     "action":
                     policy['action'],
                     "schedule":
                     policy['schedule'],
                     "enabled":
                     policy['enabled']
                 })
         return policies_list
     except Exception as e:
         error_msg = (
             'Get list of SyncIQ Policies for PowerScale: %s failed with'
             'error: %s' %
             (self.module.params['onefs_host'], utils.determine_error(e)))
         LOG.error(error_msg)
         self.module.fail_json(msg=error_msg)
コード例 #12
0
 def get_network_pools(self, access_zone, include_all_access_zones):
     """Get the list of network pools of a given PowerScale Storage"""
     try:
         network_pool_list = []
         if include_all_access_zones:
             network_pool_details = (
                 self.network_api.get_network_pools()).to_dict()
         else:
             network_pool_details = (self.network_api.get_network_pools(
                 access_zone=access_zone)).to_dict()
         pools = network_pool_details['pools']
         if pools:
             for pool in pools:
                 network_pool_list.append({
                     "id": pool["id"],
                     "name": pool["name"]
                 })
         return network_pool_list
     except Exception as e:
         error_msg = (
             'Getting list of network pools for PowerScale: %s failed with '
             'error: %s' %
             (self.module.params['onefs_host'], utils.determine_error(e)))
         LOG.error(error_msg)
         self.module.fail_json(msg=error_msg)
コード例 #13
0
 def get_clients_list(self):
     """Get the list of active clients of a given PowerScale Storage"""
     try:
         clients_list = []
         clients_details = (
             self.statistics_api.get_summary_client()).to_dict()
         LOG.info('Got active clients from PowerScale cluster  %s',
                  self.module.params['onefs_host'])
         clients = clients_details['client']
         if clients:
             for client in clients:
                 clients_list.append({
                     "local_address": client['local_addr'],
                     "local_name": client['local_name'],
                     "remote_address": client['remote_addr'],
                     "remote_name": client['remote_name'],
                     "node": client['node'],
                     "protocol": client['protocol']
                 })
         return clients_list
     except Exception as e:
         error_msg = (
             'Get active clients list for PowerScale cluster: {0} failed with'
             'error: {1}'.format(self.module.params['onefs_host'],
                                 utils.determine_error(e)))
         LOG.error(error_msg)
         self.module.fail_json(msg=error_msg)
コード例 #14
0
    def get_synciq_policy_display_attributes(self, policy_obj):
        """
        Display the SyncIQ policy attributes
        :policy_obj: Policy object
        :return: dict with SyncIQ policy details
        """
        try:
            policy_details = policy_obj.to_dict()

            if 'target_certificate_id' in policy_details:
                policy_details['target_certificate_name'] = \
                    self.get_target_cert_id_name(cert_id=policy_details['target_certificate_id'])

            if policy_details['job_delay'] is not None:
                policy_details['job_delay'] = utils.get_time_with_unit(
                    policy_details['job_delay'])

            if policy_details['target_snapshot_expiration'] is not None:
                policy_details['target_snapshot_expiration'] = \
                    utils.get_time_with_unit(policy_details['target_snapshot_expiration'])

            if policy_details['rpo_alert'] is not None:
                policy_details['rpo_alert'] = \
                    utils.get_time_with_unit(policy_details['rpo_alert'])

            return policy_details

        except Exception as e:
            error_msg = utils.determine_error(error_obj=e)
            errormsg = "Display details of SyncIQ policy %s failed with " \
                       "error %s" % (policy_obj.name, str(error_msg))
            LOG.error(errormsg)
            self.module.fail_json(msg=errormsg)
コード例 #15
0
 def get_policy_jobs(self, policy_id):
     """
     Get the list of jobs on the SyncIQ policy.
     :param policy_id: Specifies the id or name of the SyncIQ policy
     :return: returns details of the jobs on the policy
     else returns None.
     """
     try:
         jobs_list = []
         api_response = self.api_instance.list_sync_jobs().jobs
         jobs = [job for job in api_response if job.id == policy_id]
         for job in jobs:
             jobs_list.append({
                 "id": job.id,
                 "state": job.state,
                 "action": job.action
             })
         return jobs_list
     except Exception as e:
         error_message = 'Get jobs on SyncIQ policy %s failed with ' \
                         'error: %s' % (policy_id,
                                        utils.determine_error
                                        (error_obj=e))
         LOG.error(error_message)
         self.module.fail_json(msg=error_message)
コード例 #16
0
 def remove_auth_providers_to_access_zone(self, name, auth_providers,
                                          existing_auth_providers):
     """ Remove auth providers from access zone """
     try:
         updated_auth_providers_list = existing_auth_providers
         remove_auth_providers_required = False
         provider_summary = self.api_auth.get_providers_summary()
         all_providers = provider_summary.provider_instances
         for i in range(len(auth_providers)):
             provider = [
                 provider.id for provider in all_providers
                 if provider.name == auth_providers[i]['provider_name']
                 and provider.type == auth_providers[i]['provider_type']
             ]
             if not provider:
                 error_message = 'Provider: {0} of type: {1}' \
                                 ' does not exist'.format(auth_providers[i]['provider_name'], auth_providers[i]['provider_type'])
                 LOG.error(error_message)
                 self.module.fail_json(msg=error_message)
             if provider[0] in updated_auth_providers_list:
                 remove_auth_providers_required = True
                 updated_auth_providers_list.remove(provider[0])
         if not remove_auth_providers_required:
             return False
         update_zone = utils.isi_sdk.Zone(
             auth_providers=updated_auth_providers_list)
         self.api_instance.update_zone(zone=update_zone, zone_id=name)
         return True
     except Exception as e:
         error_msg = utils.determine_error(error_obj=e)
         error_message = 'Remove auth providers to access zone {0} ' \
                         'failed with error: {1}'.format(name, error_msg)
         LOG.error(error_message)
         self.module.fail_json(msg=error_message)
コード例 #17
0
    def is_smb_modification_required(self, smb_playbook, access_zone_details):
        """ Check if default smb settings of access zone needs to be modified
        """
        # Convert octal parameters to decimal for comparison
        try:
            if 'directory_create_mask' in smb_playbook and \
                    smb_playbook['directory_create_mask'] is not None:
                smb_playbook['directory_create_mask'] = int(
                    smb_playbook['directory_create_mask'], 8)
            if 'directory_create_mode' in smb_playbook and \
                    smb_playbook['directory_create_mode'] is not None:
                smb_playbook['directory_create_mode'] = int(
                    smb_playbook['directory_create_mode'], 8)
            if 'file_create_mask' in smb_playbook and \
                    smb_playbook['file_create_mask'] is not None:
                smb_playbook['file_create_mask'] = int(
                    smb_playbook['file_create_mask'], 8)
            if 'file_create_mode' in smb_playbook and \
                    smb_playbook['file_create_mode'] is not None:
                smb_playbook['file_create_mode'] = int(
                    smb_playbook['file_create_mode'], 8)
        except Exception as e:
            error_msg = utils.determine_error(error_obj=e)
            error_message = 'Conversion from octal to decimal failed with ' \
                            'error: {0}'.format(error_msg)
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)

        for key in smb_playbook.keys():
            if smb_playbook[key] != access_zone_details['smb_settings'][key]:
                LOG.info("First Key Modification %s", key)
                return True
        return False
コード例 #18
0
    def create_synciq_job(self, policy_id, job_params):
        """
        Create a job on SyncIQ policy.
        :policy_id: name or id of the policy on which job should be created
        :job_params: Dictionary of parameters for creating a job
        :return: True if job creation is successful
        """

        try:
            if job_params:
                sync_job_params = {}
                sync_job_keys = [
                    'action', 'source_snapshot', 'workers_per_node'
                ]
                sync_job_params['id'] = policy_id
                for key in sync_job_keys:
                    if key == 'action' and job_params[key] == 'run':
                        continue
                    sync_job_params[key] = job_params[key]
                sync_job = utils.isi_sdk.SyncJobCreateParams(**sync_job_params)
                if job_params['wait_for_completion']:
                    self.api_instance.create_sync_job(sync_job)
                else:
                    self.api_instance.create_sync_job(sync_job, async_req=True)

            return True
        except Exception as e:
            error_msg = utils.determine_error(error_obj=e)
            error_message = 'Failed to create job on SyncIQ policy with ' \
                            'error : %s' % str(error_msg)
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #19
0
    def get_sync_rule(self, sync_rule_id=None, sync_rule_dict=None):
        """
        Get SyncIQ performance rule details. If multiple instances are found for same
        performance rule configuration, error is thrown.
        :param sync_rule_id: ID of the performance rule
        :param sync_rule_dict: Dictionary of details of a performance rule
        :return: Dictionary of performance rule details if exists else none
        """
        duplicate_rule = []
        sync_rule_obj = None

        try:
            if sync_rule_id:
                sync_rule_obj = self.api_instance.get_sync_rule(sync_rule_id=sync_rule_id).rules[0]
                sync_rule_obj = sync_rule_obj.to_dict()
            else:
                sync_rule_list = self.api_instance.list_sync_rules().rules
                for rule in sync_rule_list:
                    rule = rule.to_dict()
                    if all(rule.get(key, None) == val for key, val in sync_rule_dict.items()) \
                            and rule['schedule'] == sync_rule_dict['schedule']:
                        duplicate_rule.append(rule)
                if len(duplicate_rule) > 1:
                    self.module.fail_json("Operation is not successful as "
                                          "more than one instance of "
                                          "SyncIQ performance rule is present with same configuration")
                elif len(duplicate_rule) == 1:
                    sync_rule_obj = duplicate_rule[0]
            return sync_rule_obj
        except utils.ApiException as e:
            if str(e.status) == '404':
                error_message = " Sync rule: %s not found." % sync_rule_id
                LOG.info(error_message)
                return None
            else:
                error_msg = utils.determine_error(error_obj=e)
                error_message = 'Failed to get SyncIQ rule with ' \
                                'error : %s' % str(error_msg)
                LOG.error(error_message)
                self.module.fail_json(msg=error_message)

        except Exception as e:
            error_msg = utils.determine_error(error_obj=e)
            error_message = 'Failed to get SyncIQ rule with ' \
                            'error : %s' % str(error_msg)
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #20
0
    def create(self, ldap_name, server_uris, server_uri_state, base_dn,
               ldap_parameters):
        """
        Add an LDAP provider.
        :param ldap_name: Specifies the LDAP provider name.
        :param server_uris: Specifies the server URIs.
        :param server_uri_state: Specifies if server_uris need to be added or
         removed from the provider. During create the parameter should be
         specifed as present-in-ldap.
        :param base_dn: Specifies the root of the tree in which to search
         identities.
        :param ldap_parameters: Specify additional parameters to configure
         LDAP domain.
        :return: LDAP Id.
        """
        if not base_dn:
            self.module.fail_json(
                msg="The parameter base_dn is mandatory while creating"
                " LDAP provider.")

        if not server_uris:
            self.module.fail_json(
                msg="The parameter server_uris is mandatory while creating"
                " LDAP provider.")

        self.validate_input(server_uris)
        if server_uri_state != 'present-in-ldap':
            self.module.fail_json(
                msg="Please specify the server_uri_state as present-in-ldap."
                " Server_uris is mandatory while creating LDAP prodiver.")

        ldap_create_params = {
            'name': ldap_name,
            'server_uris': server_uris,
            'base_dn': base_dn
        }
        if ldap_parameters:
            if ldap_parameters['groupnet']:
                ldap_create_params['groupnet'] = ldap_parameters['groupnet']
            if ldap_parameters['bind_dn']:
                ldap_create_params['bind_dn'] = ldap_parameters['bind_dn']
            if ldap_parameters['bind_password']:
                ldap_create_params['bind_password'] = \
                    ldap_parameters['bind_password']

        ldap_provider_obj = \
            utils.isi_sdk.ProvidersLdapItem(**ldap_create_params)
        try:
            api_response = self.auth_api_instance.create_providers_ldap_item(
                providers_ldap_item=ldap_provider_obj)
            message = "LDAP domain created, %s" % api_response
            LOG.info(message)
            return api_response
        except utils.ApiException as e:
            error_message = "Add an LDAP provider failed with" + \
                utils.determine_error(error_obj=e)
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #21
0
 def create_access_zone(self, access_zone_params):
     try:
         self.api_instance.create_zone(access_zone_params)
         return True
     except Exception as e:
         error_msg = utils.determine_error(error_obj=e)
         error_message = 'Creation of access zone %s ' \
             'failed with error: %s' % (access_zone_params['name'], error_msg)
         LOG.error(error_message)
         self.module.fail_json(msg=error_message)
コード例 #22
0
    def create_subnet(self, groupnet_name, subnet_name, subnet_params):
        """
        Create a subnet.
        :param groupnet_name: Specifies the groupnet name.
        :param subnet_name: Specifies the groupnet name.
        :param subnet_params: Specifies additional parameters to create a subnet.
        :return: Subnet Id.
        """
        try:
            if not subnet_params['netmask']:
                self.module.fail_json(msg="Please enter a valid netmask.")

            if not subnet_params['gateway_priority']:
                self.module.fail_json(
                    msg="Please enter a valid gateway_priority.")

            subnet_create_params = \
                {'name': subnet_name, 'addr_family': 'ipv4',
                 'gateway_priority': subnet_params['gateway_priority'],
                 'description': subnet_params['description']}
            prefixlen = get_prefix_len(subnet_params['netmask'])
            subnet_create_params['prefixlen'] = prefixlen

            subnet_params = subnet_params['subnet_params']
            if subnet_params:
                if subnet_params['sc_service_addrs_state'] and \
                        subnet_params['sc_service_addrs_state'] != 'add':
                    self.module.fail_json(
                        msg="Please specify the sc_service_addrs_state as 'add'"
                        " to create a subnet.")

                params_to_create = get_subnet_create_params(subnet_params)
                if params_to_create:
                    subnet_create_params.update(params_to_create)

            subnet_create_params = \
                utils.isi_sdk.GroupnetSubnetCreateParams(**subnet_create_params)
            api_response = \
                self.groupnet_api.create_groupnet_subnet(subnet_create_params,
                                                         groupnet_name)
            return api_response
        except ValueError as e:
            # On successful creation of subnet the isi_sdk raises an exception
            # when trying to extract the id from an empty response.
            # Adding except clause to suppress this exception
            # as a workaround.
            if e.args[0] != "Invalid value for `id`, must not be `None`":
                raise e
        except Exception as e:
            error_msg = utils.determine_error(error_obj=e)
            error_message = 'Creating subnet %s ' \
                            'failed with error: %s' % (subnet_name,
                                                       str(error_msg))
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #23
0
    def create(self, domain, instance, ads_user, ads_password, ads_parameters):
        """
        Add an Active Directory provider.
        :param domain: Specifies the Active Directory provider name.
        :param instance: Specifies Active Directory provider instance.
        :param ads_user: Specifies the user name that has permission to join a
         machine to the given domain.
        :param ads_password: Specifies the password used during domain join.
        :param ads_parameters: Specify additional parameters to configure
         ADS domain.
        :return: ADS Id.
        """
        if not domain:
            self.module.fail_json(msg="The parameter domain_name is mandatory "
                                      "while creating ADS provider")

        if not ads_user:
            self.module.fail_json(msg="The parameter ads_user is mandatory "
                                      "while creating ADS provider")

        if not ads_password:
            self.module.fail_json(msg="The parameter ads_password is mandatory "
                                      "while creating ADS provider")

        self.validate_domain(domain)
        ads_create_params = {
            'name': domain, 'user': ads_user,
            'password': ads_password
        }

        if instance:
            ads_create_params['instance'] = instance

        if ads_parameters:
            if ads_parameters['groupnet']:
                ads_create_params['groupnet'] = ads_parameters['groupnet']
            if ads_parameters['home_directory_template']:
                ads_create_params['home_directory_template'] = \
                    ads_parameters['home_directory_template']
            if ads_parameters['login_shell']:
                ads_create_params['login_shell'] = \
                    ads_parameters['login_shell']

        ads_provider_obj = utils.isi_sdk.ProvidersAdsItem(**ads_create_params)
        try:
            api_response = self.auth_api_instance.create_providers_ads_item(
                providers_ads_item=ads_provider_obj)
            message = "ADS domain created, %s" % api_response
            LOG.info(message)
            return api_response
        except utils.ApiException as e:
            error_message = "Add an Active Directory provider failed with" + \
                utils.determine_error(error_obj=e)
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #24
0
    def get_details(self, name):
        """ Get access zone details"""
        try:
            nfs_settings = {}
            api_response = self.api_instance.get_zone(name).to_dict()
            nfs_export_settings = self.api_protocol.get_nfs_settings_export(
                zone=name).to_dict()
            nfs_export_settings['export_settings'] = nfs_export_settings[
                'settings']
            del nfs_export_settings['settings']
            nfs_zone_settings = self.api_protocol.get_nfs_settings_zone(
                zone=name).to_dict()
            nfs_zone_settings['zone_settings'] = nfs_zone_settings['settings']
            del nfs_zone_settings['settings']

            nfs_settings['nfs_settings'] = nfs_export_settings
            nfs_settings['nfs_settings'].update(nfs_zone_settings)

            api_response.update(nfs_settings)
            smb_settings = self.api_protocol.get_smb_settings_share(
                zone=name).to_dict()
            smb_settings['settings']['directory_create_mask(octal)'] = \
                "{0:o}".format(smb_settings['settings']
                               ['directory_create_mask'])
            smb_settings['settings']['directory_create_mode(octal)'] = \
                "{0:o}".format(smb_settings['settings']
                               ['directory_create_mode'])
            smb_settings['settings']['file_create_mask(octal)'] = \
                "{0:o}".format(smb_settings['settings']
                               ['file_create_mask'])
            smb_settings['settings']['file_create_mode(octal)'] = \
                "{0:o}".format(smb_settings['settings']
                               ['file_create_mode'])
            smb_settings['smb_settings'] = smb_settings['settings']
            del smb_settings['settings']
            api_response.update(smb_settings)
            return api_response
        except utils.ApiException as e:
            if str(e.status) == '404':
                error_message = "Access zone {0} details are not found".\
                    format(name)
                LOG.info(error_message)
                return None
            else:
                error_msg = utils.determine_error(error_obj=e)
                error_message = 'Get details of access zone {0} failed with ' \
                                'error: {1}'.format(name, error_msg)
                LOG.error(error_message)
                self.module.fail_json(msg=error_message)
        except Exception as e:
            error_message = 'Get details of access zone {0} failed with ' \
                            'error: {1}'.format(name, str(e))
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #25
0
 def smb_modify(self, name, smb):
     """ Modify smb settings of access zone """
     try:
         self.api_protocol.update_smb_settings_share(smb, zone=name)
         LOG.info("Modification Successful")
         return True
     except Exception as e:
         error_msg = utils.determine_error(error_obj=e)
         error_message = 'Modify SMB share settings of access zone {0} ' \
             'failed with error: {1}'.format(name, error_msg)
         LOG.error(error_message)
         self.module.fail_json(msg=error_message)
コード例 #26
0
 def get_node_info(self, node_id):
     """get the specific cluster node information from PowerScale storage"""
     try:
         node_info = (self.cluster_api.get_cluster_node(node_id)).to_dict()
         LOG.info('Got node information from PowerScale cluster %s',
                  self.module.params['onefs_host'])
         return node_info
     except Exception as e:
         error_msg = (
             'get node info for PowerScale cluster: {0} failed with'
             'error: {1} '.format(self.module.params['onefs_host'],
                                  utils.determine_error(error_obj=e)))
         LOG.error(error_msg)
         self.module.fail_json(msg=error_msg)
コード例 #27
0
 def get_nodes_list(self):
     """Get the list of nodes of a given PowerScale Storage"""
     try:
         nodes_list = (self.cluster_api.get_cluster_nodes()).to_dict()
         LOG.info('Got Nodes from PowerScale cluster  %s',
                  self.module.params['onefs_host'])
         return nodes_list
     except Exception as e:
         error_msg = (
             'Get Nodes List for PowerScale cluster: {0} failed with'
             'error: {1}'.format(self.module.params['onefs_host'],
                                 utils.determine_error(e)))
         LOG.error(error_msg)
         self.module.fail_json(msg=error_msg)
コード例 #28
0
    def get_auth_providers_summary(self):
        """Get Auth providers summary"""
        try:
            providers_summary_api_response = \
                self.auth_api_instance.get_providers_summary()
            providers_summary = \
                providers_summary_api_response.provider_instances

            return providers_summary
        except utils.ApiException as e:
            error_message = "Get auth providers summary failed with" + \
                utils.determine_error(error_obj=e)
            LOG.error(error_message)
            self.module.fail_json(msg=error_message)
コード例 #29
0
 def get_access_zones_list(self):
     """Get the list of access_zones of a given PowerScale Storage"""
     try:
         access_zones_list = (self.zone_api.list_zones()).to_dict()
         LOG.info("Got Access zones from PowerScale cluster %s",
                  self.module.params['onefs_host'])
         return access_zones_list
     except Exception as e:
         error_msg = (
             'Get Access zone List for PowerScale cluster: {0} failed'
             'with error: {1}'.format(self.module.params['onefs_host'],
                                      utils.determine_error(e)))
         LOG.error(error_msg)
         self.module.fail_json(msg=error_msg)
コード例 #30
0
 def delete_groupnet(self, groupnet_name):
     """
      Delete a groupnet.
     :param groupnet_name: Specifies the groupnet name.
     :return: True if the operation is successful.
     """
     try:
         self.network_api.delete_network_groupnet(groupnet_name)
     except Exception as e:
         error_msg = utils.determine_error(error_obj=e)
         error_message = 'Deleting groupnet %s ' \
                         'failed with error: %s' % (groupnet_name,
                                                    str(error_msg))
         LOG.error(error_message)
         self.module.fail_json(msg=error_message)