def __present(self, data, resource):

        server_template_name = data.pop('serverProfileTemplateName', '')
        server_hardware_name = data.pop('serverHardwareName', '')
        server_template = None
        changed = False
        created = False

        ServerProfileReplaceNamesByUris().replace(self.oneview_client, data)

        if server_hardware_name:
            selected_server_hardware = self.__get_server_hardware_by_name(server_hardware_name)
            if not selected_server_hardware:
                raise HPOneViewValueError(self.MSG_HARDWARE_NOT_FOUND.format(server_hardware_name))
            data['serverHardwareUri'] = selected_server_hardware['uri']

        if server_template_name:
            server_template = self.oneview_client.server_profile_templates.get_by_name(server_template_name)
            if not server_template:
                raise HPOneViewValueError(self.MSG_TEMPLATE_NOT_FOUND.format(server_template_name))
            data['serverProfileTemplateUri'] = server_template['uri']
        elif data.get('serverProfileTemplateUri'):
            server_template = self.oneview_client.server_profile_templates.get(data['serverProfileTemplateUri'])

        if not resource:
            resource = self.__create_profile(data, server_template)
            changed = True
            created = True
            msg = self.MSG_CREATED
        else:
            # This allows unassigning a profile if a SH key is specifically passed in as None
            if not self.auto_assign_server_hardware:
                server_hardware_uri_exists = False
                if 'serverHardwareUri' in self.module.params['data'].keys() or 'serverHardwareName' in self.module.params['data'].keys():
                    server_hardware_uri_exists = True
                if data.get('serverHardwareUri') is None and server_hardware_uri_exists:
                    data['serverHardwareUri'] = None

            # Auto assigns a Server Hardware to Server Profile if auto_assign_server_hardware is True and no SH uris exist
            if not resource.get('serverHardwareUri') and not data.get('serverHardwareUri') and self.auto_assign_server_hardware:
                data['serverHardwareUri'] = self._auto_assign_server_profile(data, server_template)

            merged_data = ServerProfileMerger().merge_data(resource, data)

            self.__validations_for_os_custom_attributes(data, merged_data, resource)

            if not ResourceComparator.compare(resource, merged_data):

                resource = self.__update_server_profile(merged_data, resource)
                changed = True
                msg = self.MSG_UPDATED
            else:
                msg = self.MSG_ALREADY_PRESENT

        return created, changed, msg, resource
    def __present(self, data, resource):

        server_template_name = data.pop('server_template', '')
        server_hardware_name = data.pop('server_hardware', '')
        server_template = None
        changed = False
        created = False

        ServerProfileReplaceNamesByUris().replace(self.oneview_client, data)

        if server_hardware_name:
            selected_server_hardware = self.__get_server_hardware_by_name(
                server_hardware_name)
            if not selected_server_hardware:
                raise HPOneViewValueError(
                    self.MSG_HARDWARE_NOT_FOUND.format(server_hardware_name))
            data['serverHardwareUri'] = selected_server_hardware['uri']

        if server_template_name:
            server_template = self.oneview_client.server_profile_templates.get_by_name(
                server_template_name)
            if not server_template:
                raise HPOneViewValueError(
                    self.MSG_TEMPLATE_NOT_FOUND.format(server_template_name))
            data['serverProfileTemplateUri'] = server_template['uri']
        elif data.get('serverProfileTemplateUri'):
            server_template = self.oneview_client.server_profile_templates.get(
                data['serverProfileTemplateUri'])

        if not resource:
            resource = self.__create_profile(data, server_template)
            changed = True
            created = True
            msg = self.MSG_CREATED
        else:
            merged_data = ServerProfileMerger().merge_data(resource, data)

            self.__validations_for_os_custom_attributes(
                data, merged_data, resource)

            if not ResourceComparator.compare(resource, merged_data):
                resource = self.__update_server_profile(merged_data)
                changed = True
                msg = self.MSG_UPDATED
            else:
                msg = self.MSG_ALREADY_PRESENT

        return created, changed, msg, resource
Exemple #3
0
    def __update(self, data, template):
        resource = template.copy()

        merged_data = ServerProfileMerger().merge_data(resource, data)

        equal = ResourceComparator.compare(merged_data, resource)

        if equal:
            msg = self.MSG_ALREADY_PRESENT
        else:
            resource = self.resource_client.update(resource=merged_data, id_or_uri=merged_data["uri"])
            msg = self.MSG_UPDATED

        changed = not equal

        return changed, msg, resource