Example #1
0
    def set_metadata(self,
                     domain,
                     visibility,
                     key,
                     value,
                     metadata_type='MetadataStringValue'):
        """Set metadata of the provider vdc.

        :param str domain:
        :param str visibility:
        :param str key:
        :param str value:
        :param str metadata_type:

        :return: an object containing EntityType.METADATA XML data which
            represents the updated metadata associated with the provider vdc.

        :rtype: lxml.objectify.ObjectifiedElement
        """
        if self.resource is None:
            self.resource = self.client.get_resource(self.href)
        new_metadata = E.Metadata(
            E.MetadataEntry(
                {'type': 'xs:string'}, E.Domain(domain, visibility=visibility),
                E.Key(key),
                E.TypedValue(
                    {'{' + NSMAP['xsi'] + '}type': 'MetadataStringValue'},
                    E.Value(value))))
        metadata = self.client.get_linked_resource(self.resource,
                                                   RelationType.DOWN,
                                                   EntityType.METADATA.value)
        return self.client.post_linked_resource(metadata, RelationType.ADD,
                                                EntityType.METADATA.value,
                                                new_metadata)
Example #2
0
    def set_multiple_metadata(self,
                              key_value_dict,
                              domain=MetadataDomain.GENERAL,
                              visibility=MetadataVisibility.READ_WRITE,
                              metadata_value_type=MetadataValueType.STRING,
                              use_admin_endpoint=False):
        """Add/update multiple metadata entries to/of the parent object.

        If an entry with the same key exists, it will be updated with the new
        value. All entries must have the same value type and will be written to
        the same domain with identical visibility.

        :param dict key_value_dict: a dict containing key-value pairs to be
            added/updated.
        :param client.MetadataDomain domain: domain where the new entries would
            be put.
        :param client.MetadataVisibility visibility: visibility of the metadata
            entries.
        :param client.MetadataValueType metadata_value_type:
        :param bool use_admin_endpoint: if True, will use the /api/admin
            endpoint to add new entries to the metadata object else will use
            the vanilla /api endpoint.

        :return: an object of type EntityType.TASK XML which represents
            the asynchronous task that is updating the metadata entries.

        :rtype: lxml.objectify.ObjectifiedElement
        """
        if not isinstance(domain, MetadataDomain):
            raise InvalidParameterException('Invalid domain.')
        if not isinstance(visibility, MetadataVisibility):
            raise InvalidParameterException('Invalid visibility.')
        if not isinstance(metadata_value_type, MetadataValueType):
            raise InvalidParameterException('Invalid type of value.')

        metadata = self.get_all_metadata(use_admin_endpoint)
        new_metadata = E.Metadata()
        for k, v in key_value_dict.items():
            entry = E.MetadataEntry(
                {'type': 'xs:string'},
                E.Domain(domain.value, visibility=visibility.value), E.Key(k),
                E.TypedValue(
                    {'{' + NSMAP['xsi'] + '}type': metadata_value_type.value},
                    E.Value(v)))
            new_metadata.append(entry)
        return self.client.post_linked_resource(metadata, RelationType.ADD,
                                                EntityType.METADATA.value,
                                                new_metadata)
Example #3
0
 def set_metadata(self,
                  domain,
                  visibility,
                  key,
                  value,
                  metadata_type='MetadataStringValue'):
     if self.resource is None:
         self.resource = self.client.get_resource(self.href)
     new_metadata = E.Metadata(
         E.MetadataEntry(
             {'type': 'xs:string'}, E.Domain(domain, visibility=visibility),
             E.Key(key),
             E.TypedValue(
                 {'{' + NSMAP['xsi'] + '}type': 'MetadataStringValue'},
                 E.Value(value))))
     metadata = self.client.get_linked_resource(self.resource,
                                                RelationType.DOWN,
                                                EntityType.METADATA.value)
     return self.client.post_linked_resource(metadata, RelationType.ADD,
                                             EntityType.METADATA.value,
                                             new_metadata)
Example #4
0
 def vm_set_metadata(self,
                     vm,
                     metadata_dict,
                     domain='GENERAL',
                     visibility='READWRITE',
                     metadata_type='MetadataStringValue'):
     vm_resource = self.client.get_resource(vm.href)
     for key, value in metadata_dict.items():
         new_metadata = E.Metadata(
             E.MetadataEntry(
                 {'type': 'xs:string'},
                 E.Domain(domain, visibility=visibility), E.Key(key),
                 E.TypedValue(
                     {'{' + NSMAP['xsi'] + '}type': 'MetadataStringValue'},
                     E.Value(value))))
         metadata = self.client.get_linked_resource(
             vm_resource, RelationType.DOWN, EntityType.METADATA.value)
         self.wait_for_task(
             self.client.post_linked_resource(metadata, RelationType.ADD,
                                              EntityType.METADATA.value,
                                              new_metadata))
         vm.reload()
Example #5
0
 def set_metadata(self,
                  domain,
                  visibility,
                  key,
                  value,
                  metadata_type='MetadataStringValue'):
     if self.vapp_resource is None:
         self.vapp_resource = self.client.get_resource(self.href)
     new_metadata = E.Metadata(
         E.MetadataEntry(
             {'type': 'xs:string'}, E.Domain(domain, visibility=visibility),
             E.Key(key),
             E.TypedValue(
                 {
                     '{http://www.w3.org/2001/XMLSchema-instance}type':
                     'MetadataStringValue'
                 }, E.Value(value))))
     metadata = self.client.get_linked_resource(self.vapp_resource,
                                                RelationType.DOWN,
                                                EntityType.METADATA.value)
     return self.client.post_linked_resource(metadata, RelationType.ADD,
                                             EntityType.METADATA.value,
                                             new_metadata)