1 package v1 2 3 // AWSResourceReference is a reference to a specific AWS resource by ID, ARN, or filters. 4 // Only one of ID, ARN or Filters may be specified. Specifying more than one will result in 5 // a validation error. 6 // +union 7 // +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'ID' ? has(self.id) : !has(self.id)",message="id is required when type is ID, and forbidden otherwise" 8 // +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'ARN' ? has(self.arn) : !has(self.arn)",message="arn is required when type is ARN, and forbidden otherwise" 9 // +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'Filters' ? has(self.filters) : !has(self.filters)",message="filters is required when type is Filters, and forbidden otherwise" 10 type AWSResourceReference struct { 11 // Type determines how the reference will fetch the AWS resource. 12 // +unionDiscriminator 13 // +kubebuilder:validation:Required 14 Type AWSResourceReferenceType `json:"type"` 15 // ID of resource. 16 // +optional 17 ID *string `json:"id,omitempty"` 18 // ARN of resource. 19 // +optional 20 ARN *string `json:"arn,omitempty"` 21 // Filters is a set of filters used to identify a resource. 22 // +optional 23 Filters *[]AWSResourceFilter `json:"filters,omitempty"` 24 } 25 26 // AWSResourceReferenceType is an enumeration of different resource reference types. 27 // +kubebuilder:validation:Enum:="ID";"ARN";"Filters" 28 type AWSResourceReferenceType string 29 30 const ( 31 // AWSIDReferenceType is a resource reference based on the object ID. 32 AWSIDReferenceType AWSResourceReferenceType = "ID" 33 34 // AWSARNReferenceType is a resource reference based on the object ARN. 35 AWSARNReferenceType AWSResourceReferenceType = "ARN" 36 37 // AWSFiltersReferenceType is a resource reference based on filters. 38 AWSFiltersReferenceType AWSResourceReferenceType = "Filters" 39 ) 40 41 // AWSResourceFilter is a filter used to identify an AWS resource 42 type AWSResourceFilter struct { 43 // Name of the filter. Filter names are case-sensitive. 44 // +kubebuilder:validation:Required 45 Name string `json:"name"` 46 // Values includes one or more filter values. Filter values are case-sensitive. 47 // +optional 48 Values []string `json:"values,omitempty"` 49 } 50