ResourceDescriptor class

A simple descriptor of a resource type.

ResourceDescriptor annotates a resource message (either by means of a protobuf annotation or use in the service config), and associates the resource's schema, the resource type, and the pattern of the resource name.

Example:

 message Topic {
   // Indicates this message defines a resource schema.
   // Declares the resource type in the format of {service}/{kind}.
   // For Kubernetes resources, the format is {api group}/{kind}.
   option (google.api.resource) = {
     type: "pubsub.googleapis.com/Topic"
     name_descriptor: {
       pattern: "projects/{project}/topics/{topic}"
       parent_type: "cloudresourcemanager.googleapis.com/Project"
       parent_name_extractor: "projects/{project}"
     }
   };
 }

The ResourceDescriptor Yaml config will look like:

 resources:
 - type: "pubsub.googleapis.com/Topic"
   name_descriptor:
     - pattern: "projects/{project}/topics/{topic}"
       parent_type: "cloudresourcemanager.googleapis.com/Project"
       parent_name_extractor: "projects/{project}"

Sometimes, resources have multiple patterns, typically because they can live under multiple parents.

Example:

 message LogEntry {
   option (google.api.resource) = {
     type: "logging.googleapis.com/LogEntry"
     name_descriptor: {
       pattern: "projects/{project}/logs/{log}"
       parent_type: "cloudresourcemanager.googleapis.com/Project"
       parent_name_extractor: "projects/{project}"
     }
     name_descriptor: {
       pattern: "folders/{folder}/logs/{log}"
       parent_type: "cloudresourcemanager.googleapis.com/Folder"
       parent_name_extractor: "folders/{folder}"
     }
     name_descriptor: {
       pattern: "organizations/{organization}/logs/{log}"
       parent_type: "cloudresourcemanager.googleapis.com/Organization"
       parent_name_extractor: "organizations/{organization}"
     }
     name_descriptor: {
       pattern: "billingAccounts/{billing_account}/logs/{log}"
       parent_type: "billing.googleapis.com/BillingAccount"
       parent_name_extractor: "billingAccounts/{billing_account}"
     }
   };
 }

The ResourceDescriptor Yaml config will look like:

 resources:
 - type: 'logging.googleapis.com/LogEntry'
   name_descriptor:
     - pattern: "projects/{project}/logs/{log}"
       parent_type: "cloudresourcemanager.googleapis.com/Project"
       parent_name_extractor: "projects/{project}"
     - pattern: "folders/{folder}/logs/{log}"
       parent_type: "cloudresourcemanager.googleapis.com/Folder"
       parent_name_extractor: "folders/{folder}"
     - pattern: "organizations/{organization}/logs/{log}"
       parent_type: "cloudresourcemanager.googleapis.com/Organization"
       parent_name_extractor: "organizations/{organization}"
     - pattern: "billingAccounts/{billing_account}/logs/{log}"
       parent_type: "billing.googleapis.com/BillingAccount"
       parent_name_extractor: "billingAccounts/{billing_account}"

For flexible resources, the resource name doesn't contain parent names, but the resource itself has parents for policy evaluation.

Example:

 message Shelf {
   option (google.api.resource) = {
     type: "library.googleapis.com/Shelf"
     name_descriptor: {
       pattern: "shelves/{shelf}"
       parent_type: "cloudresourcemanager.googleapis.com/Project"
     }
     name_descriptor: {
       pattern: "shelves/{shelf}"
       parent_type: "cloudresourcemanager.googleapis.com/Folder"
     }
   };
 }

The ResourceDescriptor Yaml config will look like:

 resources:
 - type: 'library.googleapis.com/Shelf'
   name_descriptor:
     - pattern: "shelves/{shelf}"
       parent_type: "cloudresourcemanager.googleapis.com/Project"
     - pattern: "shelves/{shelf}"
       parent_type: "cloudresourcemanager.googleapis.com/Folder"
Inheritance
  • Object
  • GeneratedMessage
  • ResourceDescriptor
Available extensions

Constructors

ResourceDescriptor.new({String? type, Iterable<String>? pattern, String? nameField, ResourceDescriptor_History? history, String? plural, String? singular, Iterable<ResourceDescriptor_Style>? style})
factory
ResourceDescriptor.fromBuffer(List<int> i, [ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
factory
ResourceDescriptor.fromJson(String i, [ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
factory

Properties

hashCode int
Calculates a hash code based on the contents of the protobuf.
no setterinherited
history ResourceDescriptor_History
Optional. The historical or future-looking state of the resource pattern.
getter/setter pair
info_ → BuilderInfo
no setteroverride
isFrozen bool
Returns true if this message is marked read-only. Otherwise false.
no setterinherited
nameField String
Optional. The field on the resource that designates the resource name field. If omitted, this is assumed to be "name".
getter/setter pair
pattern → PbList<String>
Optional. The relative resource name pattern associated with this resource type. The DNS prefix of the full resource name shouldn't be specified here.
no setter
plural String
The plural name used in the resource name and permission names, such as 'projects' for the resource name of 'projects/{project}' and the permission name of 'cloudresourcemanager.googleapis.com/projects.get'. It is the same concept of the plural field in k8s CRD spec https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/
getter/setter pair
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
singular String
The same concept of the singular field in k8s CRD spec https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ Such as "project" for the resourcemanager.googleapis.com/Project type.
getter/setter pair
style → PbList<ResourceDescriptor_Style>
Style flag(s) for this resource. These indicate that a resource is expected to conform to a given style. See the specific style flags for additional information.
no setter
type String
The resource type. It must be in the format of {service_name}/{resource_type_kind}. The resource_type_kind must be singular and must not include version numbers.
getter/setter pair
unknownFields → UnknownFieldSet
no setterinherited

Methods

addExtension(Extension extension, Object? value) → void
Adds an extension field value to a repeated field.
inherited
check() → void
Throws a StateError if the message has required fields without a value.
inherited
clear() → void
Clears all data that was set in this message.
inherited
clearExtension(Extension extension) → void
Clears an extension field and also removes the extension.
inherited
clearField(int tagNumber) → void
Clears the contents of a given field.
inherited
clearHistory() → void
clearNameField() → void
clearPlural() → void
clearSingular() → void
clearType() → void
clone() ResourceDescriptor
Creates a deep copy of the fields in this message. (The generated code uses mergeFromMessage.)
override
copyWith(void updates(ResourceDescriptor)) ResourceDescriptor
Apply updates to a copy of this message.
override
createEmptyInstance() ResourceDescriptor
Creates an empty instance of the same message type as this.
override
deepCopy() → T

Available on T, provided by the GeneratedMessageGenericExtensions extension

Returns a writable deep copy of this message.
extensionsAreInitialized() bool
inherited
freeze() → GeneratedMessage
Make this message read-only.
inherited
getDefaultForField(int tagNumber) → dynamic
Returns the default value for the given field.
inherited
getExtension(Extension extension) → dynamic
Returns the value of extension.
inherited
getField(int tagNumber) → dynamic
Returns the value of the field associated with tagNumber, or the default value if it is not set.
inherited
getFieldOrNull(int tagNumber) → dynamic
Returns the value of a field, ignoring any defaults.
inherited
getTagNumber(String fieldName) int?
inherited
hasExtension(Extension extension) bool
Returns true if a value of extension is present.
inherited
hasField(int tagNumber) bool
Whether this message has a field associated with tagNumber.
inherited
hasHistory() bool
hasNameField() bool
hasPlural() bool
hasRequiredFields() bool
Whether the message has required fields.
inherited
hasSingular() bool
hasType() bool
isInitialized() bool
Whether all required fields in the message and embedded messages are set.
inherited
mergeFromBuffer(List<int> input, [ExtensionRegistry extensionRegistry = ExtensionRegistry.EMPTY]) → void
Merges serialized protocol buffer data into this message.
inherited
mergeFromCodedBufferReader(CodedBufferReader input, [ExtensionRegistry extensionRegistry = ExtensionRegistry.EMPTY]) → void
Same as mergeFromBuffer, but takes a CodedBufferReader input.
inherited
mergeFromJson(String data, [ExtensionRegistry extensionRegistry = ExtensionRegistry.EMPTY]) → void
Merges field values from data, a JSON object, encoded as described by GeneratedMessage.writeToJson.
inherited
mergeFromJsonMap(Map<String, dynamic> json, [ExtensionRegistry extensionRegistry = ExtensionRegistry.EMPTY]) → void
Merges field values from a JSON object represented as a Dart map.
inherited
mergeFromMessage(GeneratedMessage other) → void
Merges the contents of the other into this message.
inherited
mergeFromProto3Json(Object? json, {TypeRegistry typeRegistry = const TypeRegistry.empty(), bool ignoreUnknownFields = false, bool supportNamesWithUnderscores = true, bool permissiveEnums = false}) → void
Merges field values from json, a JSON object using proto3 encoding.
inherited
mergeUnknownFields(UnknownFieldSet unknownFieldSet) → void
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
rebuild(void updates(T)) → T

Available on T, provided by the GeneratedMessageGenericExtensions extension

Apply updates to a copy of this message.
setExtension(Extension extension, Object value) → void
Sets the value of a non-repeated extension field to value.
inherited
setField(int tagNumber, Object value) → void
Sets the value of a field by its tagNumber.
inherited
toBuilder() → GeneratedMessage
Creates a writable, shallow copy of this message.
inherited
toDebugString() String
Returns a String representation of this message.
inherited
toProto3Json({TypeRegistry typeRegistry = const TypeRegistry.empty()}) Object?
Returns an Object representing Proto3 JSON serialization of this.
inherited
toString() String
Returns a String representation of this message.
inherited
writeToBuffer() Uint8List
Serialize the message as the protobuf binary format.
inherited
writeToCodedBufferWriter(CodedBufferWriter output) → void
Same as writeToBuffer, but serializes to the given CodedBufferWriter.
inherited
writeToJson() String
Returns a JSON string that encodes this message.
inherited
writeToJsonMap() Map<String, dynamic>
Returns the JSON encoding of this message as a Dart Map.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited