final case class ResourceDescriptor(type: String = "", pattern: Seq[String] = _root_.scala.Seq.empty, nameField: String = "", history: History = ..., plural: String = "", singular: String = "", unknownFields: UnknownFieldSet = ...) extends GeneratedMessage with Updatable[ResourceDescriptor] with Product with Serializable

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"
type

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. Example: storage.googleapis.com/Bucket The value of the resource_type_kind must follow the regular expression /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and should use PascalCase (UpperCamelCase). The maximum number of characters allowed for the resource_type_kind is 100.

pattern

Optional. The relative resource name pattern associated with this resource type. The DNS prefix of the full resource name shouldn't be specified here. The path pattern must follow the syntax, which aligns with HTTP binding syntax: Template = Segment { "/" Segment } ; Segment = LITERAL | Variable ; Variable = "{" LITERAL "}" ; Examples:

  • "projects/{project}/topics/{topic}"
  • "projects/{project}/knowledgeBases/{knowledge_base}" The components in braces correspond to the IDs for each resource in the hierarchy. It is expected that, if multiple patterns are provided, the same component name (e.g. "project") refers to IDs of the same type of resource.
nameField

Optional. The field on the resource that designates the resource name field. If omitted, this is assumed to be "name".

history

Optional. The historical or future-looking state of the resource pattern. Example: // The InspectTemplate message originally only supported resource // names with organization, and project was added later. message InspectTemplate { option (google.api.resource) = { type: "dlp.googleapis.com/InspectTemplate" pattern: "organizations/{organization}/inspectTemplates/{inspect_template}" pattern: "projects/{project}/inspectTemplates/{inspect_template}" history: ORIGINALLY_SINGLE_PATTERN }; }

plural

The plural name used in the resource name, such as 'projects' for the name of 'projects/{project}'. 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/

singular

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.

Annotations
@SerialVersionUID()
Linear Supertypes
Product, Equals, Updatable[ResourceDescriptor], GeneratedMessage, Serializable, Serializable, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ResourceDescriptor
  2. Product
  3. Equals
  4. Updatable
  5. GeneratedMessage
  6. Serializable
  7. Serializable
  8. AnyRef
  9. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ResourceDescriptor(type: String = "", pattern: Seq[String] = _root_.scala.Seq.empty, nameField: String = "", history: History = ..., plural: String = "", singular: String = "", unknownFields: UnknownFieldSet = ...)

    type

    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. Example: storage.googleapis.com/Bucket The value of the resource_type_kind must follow the regular expression /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and should use PascalCase (UpperCamelCase). The maximum number of characters allowed for the resource_type_kind is 100.

    pattern

    Optional. The relative resource name pattern associated with this resource type. The DNS prefix of the full resource name shouldn't be specified here. The path pattern must follow the syntax, which aligns with HTTP binding syntax: Template = Segment { "/" Segment } ; Segment = LITERAL | Variable ; Variable = "{" LITERAL "}" ; Examples:

    • "projects/{project}/topics/{topic}"
    • "projects/{project}/knowledgeBases/{knowledge_base}" The components in braces correspond to the IDs for each resource in the hierarchy. It is expected that, if multiple patterns are provided, the same component name (e.g. "project") refers to IDs of the same type of resource.
    nameField

    Optional. The field on the resource that designates the resource name field. If omitted, this is assumed to be "name".

    history

    Optional. The historical or future-looking state of the resource pattern. Example: // The InspectTemplate message originally only supported resource // names with organization, and project was added later. message InspectTemplate { option (google.api.resource) = { type: "dlp.googleapis.com/InspectTemplate" pattern: "organizations/{organization}/inspectTemplates/{inspect_template}" pattern: "projects/{project}/inspectTemplates/{inspect_template}" history: ORIGINALLY_SINGLE_PATTERN }; }

    plural

    The plural name used in the resource name, such as 'projects' for the name of 'projects/{project}'. 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/

    singular

    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.

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def addAllPattern(__vs: Iterable[String]): ResourceDescriptor
  5. def addPattern(__vs: String*): ResourceDescriptor
  6. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  7. def clearPattern: ResourceDescriptor
  8. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  9. def companion: ResourceDescriptor.type
    Definition Classes
    ResourceDescriptor → GeneratedMessage
  10. def discardUnknownFields: ResourceDescriptor
  11. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  12. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  13. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  14. def getField(__field: FieldDescriptor): PValue
    Definition Classes
    ResourceDescriptor → GeneratedMessage
  15. def getFieldByNumber(__fieldNumber: Int): Any
    Definition Classes
    ResourceDescriptor → GeneratedMessage
  16. val history: History
  17. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  18. val nameField: String
  19. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  20. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  21. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  22. val pattern: Seq[String]
  23. val plural: String
  24. def serializedSize: Int
    Definition Classes
    ResourceDescriptor → GeneratedMessage
  25. val singular: String
  26. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  27. final def toByteArray: Array[Byte]
    Definition Classes
    GeneratedMessage
  28. final def toByteString: ByteString
    Definition Classes
    GeneratedMessage
  29. final def toPMessage: PMessage
    Definition Classes
    GeneratedMessage
  30. def toProtoString: String
    Definition Classes
    ResourceDescriptor → GeneratedMessage
  31. val type: String
  32. val unknownFields: UnknownFieldSet
  33. def update(ms: (Lens[ResourceDescriptor, ResourceDescriptor]) ⇒ Mutation[ResourceDescriptor]*): ResourceDescriptor
    Definition Classes
    Updatable
  34. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  35. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  36. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  37. def withHistory(__v: History): ResourceDescriptor
  38. def withNameField(__v: String): ResourceDescriptor
  39. def withPattern(__v: Seq[String]): ResourceDescriptor
  40. def withPlural(__v: String): ResourceDescriptor
  41. def withSingular(__v: String): ResourceDescriptor
  42. def withType(__v: String): ResourceDescriptor
  43. def withUnknownFields(__v: UnknownFieldSet): ResourceDescriptor
  44. final def writeDelimitedTo(output: OutputStream): Unit
    Definition Classes
    GeneratedMessage
  45. def writeTo(_output__: CodedOutputStream): Unit
    Definition Classes
    ResourceDescriptor → GeneratedMessage
  46. final def writeTo(output: OutputStream): Unit
    Definition Classes
    GeneratedMessage

Inherited from Product

Inherited from Equals

Inherited from Updatable[ResourceDescriptor]

Inherited from GeneratedMessage

Inherited from Serializable

Inherited from Serializable

Inherited from AnyRef

Inherited from Any

Ungrouped