diff --git a/apis/resources/v1alpha1/domain_types.go b/apis/resources/v1alpha1/domain_types.go index b36bca9b..cf470a40 100755 --- a/apis/resources/v1alpha1/domain_types.go +++ b/apis/resources/v1alpha1/domain_types.go @@ -111,6 +111,7 @@ type DomainStatus struct { // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,cloudfoundry} +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.name) || (has(self.spec.forProvider.subDomain) && has(self.spec.forProvider.domain))",message="either name or both domain and subdomain must be set" type Domain struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/apis/resources/v1alpha1/orgmember_types.go b/apis/resources/v1alpha1/orgmember_types.go index d1e12dd9..3918ed18 100644 --- a/apis/resources/v1alpha1/orgmember_types.go +++ b/apis/resources/v1alpha1/orgmember_types.go @@ -13,7 +13,7 @@ type OrgMembersParameters struct { OrgReference `json:",inline"` // (String) Org role type to assign to members; see valid role types https://v3-apidocs.cloudfoundry.org/version/3.127.0/index.html#valid-role-types - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional // +kubebuilder:validation:Enum=User;Auditor;Manager;BillingManager;Users;Auditors;Managers;BillingManagers RoleType string `json:"roleType"` } @@ -38,6 +38,9 @@ type OrgMembersStatus struct { // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" // +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,cloudfoundry} +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.roleType)",message="roleType is required" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.orgName) || has(self.spec.forProvider.orgRef) || has(self.spec.forProvider.orgSelector))",message="OrgReference is required: exactly one of orgName, orgRef, or orgSelector must be set" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.members) && self.spec.forProvider.members.size() >= 1)",message="Members validation: at least one member must be set" type OrgMembers struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/apis/resources/v1alpha1/orgrole_types.go b/apis/resources/v1alpha1/orgrole_types.go index 79e79564..77884d92 100755 --- a/apis/resources/v1alpha1/orgrole_types.go +++ b/apis/resources/v1alpha1/orgrole_types.go @@ -40,7 +40,6 @@ type OrgRoleParameters struct { OrgReference `json:",inline"` // (String) The org role type; see [Valid role types](https://v3-apidocs.cloudfoundry.org/version/3.154.0/index.html#valid-role-types). - // +kubebuilder:validation:Required // +kubebuilder:validation:Enum=User;Auditor;Manager;BillingManager;Users;Auditors;Managers;BillingManagers Type string `json:"type,omitempty" tf:"type,omitempty"` @@ -49,7 +48,6 @@ type OrgRoleParameters struct { Origin *string `json:"origin,omitempty" tf:"origin,omitempty"` // (String) The username of the Cloud Foundry user to assign the role to. - // +kubebuilder:validation:Required Username string `json:"username,omitempty" tf:"username,omitempty"` } @@ -75,6 +73,9 @@ type OrgRoleStatus struct { // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,cloudfoundry} +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.type)",message="type is required" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.username)",message="username is required" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.orgName) || has(self.spec.forProvider.orgRef) || has(self.spec.forProvider.orgSelector))",message="OrgReference is required: exactly one of orgName, orgRef, or orgSelector must be set" type OrgRole struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/apis/resources/v1alpha1/role_types.go b/apis/resources/v1alpha1/role_types.go index 024fcaeb..34364c71 100644 --- a/apis/resources/v1alpha1/role_types.go +++ b/apis/resources/v1alpha1/role_types.go @@ -74,6 +74,7 @@ type RoleAssignments struct { // MemberList includes a list of members and an enforcement policy for role assignment. type MemberList struct { // (List of Attributes) List of members (usernames) to assign as org members with the specified role type. Defaults to empty list. + // +kubebuilder:validation:Optional Members []*Member `json:"members"` // (String) Set to `Lax` to enforce that the role is assigned to AT LEAST those members as defined in this CR. Set to `Strict` to enforce that the role is assigned to EXACTLY those members as defined in this CR and any other members will be removed. Defaults to `Lax`. diff --git a/apis/resources/v1alpha1/servicecredentialbinding_types.go b/apis/resources/v1alpha1/servicecredentialbinding_types.go index 2754f647..c0561792 100644 --- a/apis/resources/v1alpha1/servicecredentialbinding_types.go +++ b/apis/resources/v1alpha1/servicecredentialbinding_types.go @@ -21,12 +21,8 @@ type ServiceCredentialBindingObservation struct { RetiredKeys []*SCBResource `json:"retiredKeys,omitempty"` } -// +kubebuilder:validation:XValidation:rule="!(has(self.type) && self.type == 'app') || !has(self.rotation)",message="rotation cannot be enabled when type is app" -// +kubebuilder:validation:XValidation:rule="!(has(self.type) && self.type == 'key') || has(self.name)",message="name is required when type is key" -// +kubebuilder:validation:XValidation:rule="!(has(self.type) && self.type == 'app') || has(self.app) || has(self.appRef) || has(self.appSelector)",message="app, appRef, or appSelector is required when type is app" type ServiceCredentialBindingParameters struct { // (String) The type of the service credential binding in Cloud Foundry. Either "key" or "app". - // +kubebuilder:validation:Required // +kubebuilder:validation:Enum=key;app // +kubebuilder:default=key Type string `json:"type,omitempty"` @@ -122,6 +118,12 @@ type SCBResource struct { // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" // +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,cloudfoundry} +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.type)",message="type is required" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || !(has(self.spec.forProvider.type) && self.spec.forProvider.type == 'key') || has(self.spec.forProvider.name)",message="name is required when type is key" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || !(has(self.spec.forProvider.type) && self.spec.forProvider.type == 'app') || !has(self.spec.forProvider.rotation)",message="rotation cannot be enabled when type is app" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || !(has(self.spec.forProvider.type) && self.spec.forProvider.type == 'app') || (has(self.spec.forProvider.app) || has(self.spec.forProvider.appRef) || has(self.spec.forProvider.appSelector))",message="AppReference is required: exactly one of app, appRef, or appSelector must be set if type is app" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.serviceInstance) || has(self.spec.forProvider.serviceInstanceRef) || has(self.spec.forProvider.serviceInstanceSelector))",message="ServiceInstanceReference is required: exactly one of serviceInstance, serviceInstanceRef, or serviceInstanceSelector must be set" +// +kubebuilder:validation:XValidation:rule="[has(self.spec.forProvider.parameters), has(self.spec.forProvider.paramsSecretRef)].filter(x, x).size() <= 1",message="ParametersReference validation:either parameters or paramsSecretRef may be set but not both" type ServiceCredentialBinding struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/apis/resources/v1alpha1/serviceinstance_types.go b/apis/resources/v1alpha1/serviceinstance_types.go index f2a5e7a6..8e5c92e6 100755 --- a/apis/resources/v1alpha1/serviceinstance_types.go +++ b/apis/resources/v1alpha1/serviceinstance_types.go @@ -28,11 +28,9 @@ const ( type ServiceInstanceParameters struct { // (String) The name of the service instance - // +kubebuilder:validation:Required Name *string `json:"name,omitempty" tf:"name,omitempty"` // (String) Type of the service instance. Either managed or user-provided. Default is managed. - // +required // +kubebuilder:default=managed Type ServiceInstanceType `json:"type"` @@ -245,8 +243,13 @@ type ServiceInstanceStatus struct { // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,cloudfoundry} +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.name)",message="name is required" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.type)",message="type is required" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || !(has(self.spec.forProvider.type) && self.spec.forProvider.type == 'managed') || has(self.spec.forProvider.servicePlan)",message="servicePlan is required when type is managed" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || !(has(self.spec.forProvider.type) && self.spec.forProvider.type == 'managed') || !has(self.spec.forProvider.servicePlan) || has(self.spec.forProvider.servicePlan.id) || (has(self.spec.forProvider.servicePlan.offering) && has(self.spec.forProvider.servicePlan.plan))",message="either id or offering and plan must be set on servicePlan" +// +kubebuilder:validation:XValidation:rule="!(has(self.spec.forProvider.type) && self.spec.forProvider.type == 'user-provided') || [has(self.spec.forProvider.credentials), has(self.spec.forProvider.jsonCredentials), has(self.spec.forProvider.credentialsSecretRef)].filter(x, x).size() <= 1",message="CredentialsReference validation: only one of credentials, jsonCredentials, or credentialsSecretRef can be set" +// +kubebuilder:validation:XValidation:rule="[has(self.spec.forProvider.parameters), has(self.spec.forProvider.jsonParams), has(self.spec.forProvider.paramsSecretRef )].filter(x, x).size() <= 1",message="ParamsReference validation: only one of parameters, jsonParams, or paramsSecretRef can be set" // +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.spaceName) || has(self.spec.forProvider.spaceRef) || has(self.spec.forProvider.spaceSelector))",message="SpaceReference is required: exactly one of spaceName, spaceRef, or spaceSelector must be set" -// +kubebuilder:validation:XValidation:rule="[has(self.spec.forProvider.spaceName), has(self.spec.forProvider.spaceRef), has(self.spec.forProvider.spaceSelector)].filter(x, x).size() <= 1",message="SpaceReference validation: only one of spaceName, spaceRef, or spaceSelector can be set" type ServiceInstance struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/apis/resources/v1alpha1/space_types.go b/apis/resources/v1alpha1/space_types.go index 00f0a804..56f0d34f 100755 --- a/apis/resources/v1alpha1/space_types.go +++ b/apis/resources/v1alpha1/space_types.go @@ -70,7 +70,6 @@ type SpaceParameters struct { Labels map[string]*string `json:"labels,omitempty" tf:"labels,omitempty"` // (String) The name of the space in Cloud Foundry. - // +kubebuilder:validation:Required Name string `json:"name,omitempty" tf:"name,omitempty"` // (Attributes) Reference to the organization in which to create the space. @@ -99,6 +98,8 @@ type SpaceStatus struct { // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,cloudfoundry} +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.name)",message="name is required" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.orgName) || has(self.spec.forProvider.orgRef) || has(self.spec.forProvider.orgSelector))",message="OrgReference is required: exactly one of orgName, orgRef, or orgSelector must be set" type Space struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/apis/resources/v1alpha1/spacemember_types.go b/apis/resources/v1alpha1/spacemember_types.go index 8213095b..e6ee9725 100644 --- a/apis/resources/v1alpha1/spacemember_types.go +++ b/apis/resources/v1alpha1/spacemember_types.go @@ -13,8 +13,8 @@ type SpaceMembersParameters struct { SpaceReference `json:",inline"` // (String) Space role type to assign to members; see valid role types https://v3-apidocs.cloudfoundry.space/version/3.127.0/index.html#valid-role-types + // +kubebuilder:validation:Optional // +kubebuilder:validation:Enum=Developer;Auditor;Manager;Supporter;Developers;Auditors;Managers;Supporters - // +kubebuilder:validation:Required RoleType string `json:"roleType"` // (Attributes) List of members and enforcement policy for role assignment. @@ -43,8 +43,9 @@ type SpaceMembersStatus struct { // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" // +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,cloudfoundry} +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.roleType)",message="roleType is required" // +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.spaceName) || has(self.spec.forProvider.spaceRef) || has(self.spec.forProvider.spaceSelector))",message="SpaceReference is required: exactly one of spaceName, spaceRef, or spaceSelector must be set" -// +kubebuilder:validation:XValidation:rule="[has(self.spec.forProvider.spaceName), has(self.spec.forProvider.spaceRef), has(self.spec.forProvider.spaceSelector)].filter(x, x).size() <= 1",message="SpaceReference validation: only one of spaceName, spaceRef, or spaceSelector can be set" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.members) && self.spec.forProvider.members.size() >= 1)",message="Members validation: at least one member must be set" type SpaceMembers struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/apis/resources/v1alpha1/spacerole_types.go b/apis/resources/v1alpha1/spacerole_types.go index a2ee8d2b..82ba8196 100755 --- a/apis/resources/v1alpha1/spacerole_types.go +++ b/apis/resources/v1alpha1/spacerole_types.go @@ -41,8 +41,8 @@ type SpaceRoleParameters struct { SpaceReference `json:",inline"` // (String) The space role type; see [Valid role types](https://v3-apidocs.cloudfoundry.org/version/3.154.0/index.html#valid-role-types). - // +kubebuilder:validation:Required // +kubebuilder:validation:Enum=Developer;Auditor;Manager;Supporter;Developers;Auditors;Managers;Supporters + // +kubebuilder:validation:Optional Type string `json:"type,omitempty" tf:"type,omitempty"` // (String) The identity provider for the UAA user. @@ -50,7 +50,7 @@ type SpaceRoleParameters struct { Origin *string `json:"origin,omitempty" tf:"origin,omitempty"` // (String) The username of the Cloud Foundry user to assign the role to. - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Username string `json:"username,omitempty" tf:"username,omitempty"` } @@ -76,8 +76,9 @@ type SpaceRoleStatus struct { // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,cloudfoundry} +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.type)",message="type is required" +// +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.username)",message="username is required" // +kubebuilder:validation:XValidation:rule="self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.spaceName) || has(self.spec.forProvider.spaceRef) || has(self.spec.forProvider.spaceSelector))",message="SpaceReference is required: exactly one of spaceName, spaceRef, or spaceSelector must be set" -// +kubebuilder:validation:XValidation:rule="[has(self.spec.forProvider.spaceName), has(self.spec.forProvider.spaceRef), has(self.spec.forProvider.spaceSelector)].filter(x, x).size() <= 1",message="SpaceReference validation: only one of spaceName, spaceRef, or spaceSelector can be set" type SpaceRole struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/package/crds/cloudfoundry.crossplane.io_domains.yaml b/package/crds/cloudfoundry.crossplane.io_domains.yaml index 1b2a1109..4067cc83 100644 --- a/package/crds/cloudfoundry.crossplane.io_domains.yaml +++ b/package/crds/cloudfoundry.crossplane.io_domains.yaml @@ -494,6 +494,10 @@ spec: required: - spec type: object + x-kubernetes-validations: + - message: either name or both domain and subdomain must be set + rule: self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.name) + || (has(self.spec.forProvider.subDomain) && has(self.spec.forProvider.domain)) served: true storage: true subresources: diff --git a/package/crds/cloudfoundry.crossplane.io_orgmembers.yaml b/package/crds/cloudfoundry.crossplane.io_orgmembers.yaml index 46062ffb..09fa8580 100644 --- a/package/crds/cloudfoundry.crossplane.io_orgmembers.yaml +++ b/package/crds/cloudfoundry.crossplane.io_orgmembers.yaml @@ -198,9 +198,6 @@ spec: - Managers - BillingManagers type: string - required: - - members - - roleType type: object managementPolicies: default: @@ -439,6 +436,16 @@ spec: required: - spec type: object + x-kubernetes-validations: + - message: roleType is required + rule: self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.roleType) + - message: 'OrgReference is required: exactly one of orgName, orgRef, or orgSelector + must be set' + rule: self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.orgName) + || has(self.spec.forProvider.orgRef) || has(self.spec.forProvider.orgSelector)) + - message: 'Members validation: at least one member must be set' + rule: self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.members) + && self.spec.forProvider.members.size() >= 1) served: true storage: true subresources: diff --git a/package/crds/cloudfoundry.crossplane.io_orgroles.yaml b/package/crds/cloudfoundry.crossplane.io_orgroles.yaml index f36a5064..59d9ad79 100644 --- a/package/crds/cloudfoundry.crossplane.io_orgroles.yaml +++ b/package/crds/cloudfoundry.crossplane.io_orgroles.yaml @@ -176,9 +176,6 @@ spec: description: (String) The username of the Cloud Foundry user to assign the role to. type: string - required: - - type - - username type: object managementPolicies: default: @@ -435,6 +432,15 @@ spec: required: - spec type: object + x-kubernetes-validations: + - message: type is required + rule: self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.type) + - message: username is required + rule: self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.username) + - message: 'OrgReference is required: exactly one of orgName, orgRef, or orgSelector + must be set' + rule: self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.orgName) + || has(self.spec.forProvider.orgRef) || has(self.spec.forProvider.orgSelector)) served: true storage: true subresources: diff --git a/package/crds/cloudfoundry.crossplane.io_servicecredentialbindings.yaml b/package/crds/cloudfoundry.crossplane.io_servicecredentialbindings.yaml index cff9b298..7c570887 100644 --- a/package/crds/cloudfoundry.crossplane.io_servicecredentialbindings.yaml +++ b/package/crds/cloudfoundry.crossplane.io_servicecredentialbindings.yaml @@ -296,17 +296,7 @@ spec: - key - app type: string - required: - - type type: object - x-kubernetes-validations: - - message: rotation cannot be enabled when type is app - rule: '!(has(self.type) && self.type == ''app'') || !has(self.rotation)' - - message: name is required when type is key - rule: '!(has(self.type) && self.type == ''key'') || has(self.name)' - - message: app, appRef, or appSelector is required when type is app - rule: '!(has(self.type) && self.type == ''app'') || has(self.app) - || has(self.appRef) || has(self.appSelector)' managementPolicies: default: - '*' @@ -581,6 +571,28 @@ spec: required: - spec type: object + x-kubernetes-validations: + - message: type is required + rule: self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.type) + - message: name is required when type is key + rule: self.spec.managementPolicies == ['Observe'] || !(has(self.spec.forProvider.type) + && self.spec.forProvider.type == 'key') || has(self.spec.forProvider.name) + - message: rotation cannot be enabled when type is app + rule: self.spec.managementPolicies == ['Observe'] || !(has(self.spec.forProvider.type) + && self.spec.forProvider.type == 'app') || !has(self.spec.forProvider.rotation) + - message: 'AppReference is required: exactly one of app, appRef, or appSelector + must be set if type is app' + rule: self.spec.managementPolicies == ['Observe'] || !(has(self.spec.forProvider.type) + && self.spec.forProvider.type == 'app') || (has(self.spec.forProvider.app) + || has(self.spec.forProvider.appRef) || has(self.spec.forProvider.appSelector)) + - message: 'ServiceInstanceReference is required: exactly one of serviceInstance, + serviceInstanceRef, or serviceInstanceSelector must be set' + rule: self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.serviceInstance) + || has(self.spec.forProvider.serviceInstanceRef) || has(self.spec.forProvider.serviceInstanceSelector)) + - message: ParametersReference validation:either parameters or paramsSecretRef + may be set but not both + rule: '[has(self.spec.forProvider.parameters), has(self.spec.forProvider.paramsSecretRef)].filter(x, + x).size() <= 1' served: true storage: true subresources: diff --git a/package/crds/cloudfoundry.crossplane.io_serviceinstances.yaml b/package/crds/cloudfoundry.crossplane.io_serviceinstances.yaml index aa5f0139..f1d1acaf 100644 --- a/package/crds/cloudfoundry.crossplane.io_serviceinstances.yaml +++ b/package/crds/cloudfoundry.crossplane.io_serviceinstances.yaml @@ -303,7 +303,6 @@ spec: - user-provided type: string required: - - name - type type: object managementPolicies: @@ -645,14 +644,32 @@ spec: - spec type: object x-kubernetes-validations: + - message: name is required + rule: self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.name) + - message: type is required + rule: self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.type) + - message: servicePlan is required when type is managed + rule: self.spec.managementPolicies == ['Observe'] || !(has(self.spec.forProvider.type) + && self.spec.forProvider.type == 'managed') || has(self.spec.forProvider.servicePlan) + - message: either id or offering and plan must be set on servicePlan + rule: self.spec.managementPolicies == ['Observe'] || !(has(self.spec.forProvider.type) + && self.spec.forProvider.type == 'managed') || !has(self.spec.forProvider.servicePlan) + || has(self.spec.forProvider.servicePlan.id) || (has(self.spec.forProvider.servicePlan.offering) + && has(self.spec.forProvider.servicePlan.plan)) + - message: 'CredentialsReference validation: only one of credentials, jsonCredentials, + or credentialsSecretRef can be set' + rule: '!(has(self.spec.forProvider.type) && self.spec.forProvider.type == + ''user-provided'') || [has(self.spec.forProvider.credentials), has(self.spec.forProvider.jsonCredentials), + has(self.spec.forProvider.credentialsSecretRef)].filter(x, x).size() <= + 1' + - message: 'ParamsReference validation: only one of parameters, jsonParams, + or paramsSecretRef can be set' + rule: '[has(self.spec.forProvider.parameters), has(self.spec.forProvider.jsonParams), + has(self.spec.forProvider.paramsSecretRef )].filter(x, x).size() <= 1' - message: 'SpaceReference is required: exactly one of spaceName, spaceRef, or spaceSelector must be set' rule: self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.spaceName) || has(self.spec.forProvider.spaceRef) || has(self.spec.forProvider.spaceSelector)) - - message: 'SpaceReference validation: only one of spaceName, spaceRef, or - spaceSelector can be set' - rule: '[has(self.spec.forProvider.spaceName), has(self.spec.forProvider.spaceRef), - has(self.spec.forProvider.spaceSelector)].filter(x, x).size() <= 1' served: true storage: true subresources: diff --git a/package/crds/cloudfoundry.crossplane.io_spacemembers.yaml b/package/crds/cloudfoundry.crossplane.io_spacemembers.yaml index d9298b2d..f1d53571 100644 --- a/package/crds/cloudfoundry.crossplane.io_spacemembers.yaml +++ b/package/crds/cloudfoundry.crossplane.io_spacemembers.yaml @@ -210,9 +210,6 @@ spec: type: string type: object type: object - required: - - members - - roleType type: object managementPolicies: default: @@ -452,14 +449,15 @@ spec: - spec type: object x-kubernetes-validations: + - message: roleType is required + rule: self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.roleType) - message: 'SpaceReference is required: exactly one of spaceName, spaceRef, or spaceSelector must be set' rule: self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.spaceName) || has(self.spec.forProvider.spaceRef) || has(self.spec.forProvider.spaceSelector)) - - message: 'SpaceReference validation: only one of spaceName, spaceRef, or - spaceSelector can be set' - rule: '[has(self.spec.forProvider.spaceName), has(self.spec.forProvider.spaceRef), - has(self.spec.forProvider.spaceSelector)].filter(x, x).size() <= 1' + - message: 'Members validation: at least one member must be set' + rule: self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.members) + && self.spec.forProvider.members.size() >= 1) served: true storage: true subresources: diff --git a/package/crds/cloudfoundry.crossplane.io_spaceroles.yaml b/package/crds/cloudfoundry.crossplane.io_spaceroles.yaml index e96e9263..27018483 100644 --- a/package/crds/cloudfoundry.crossplane.io_spaceroles.yaml +++ b/package/crds/cloudfoundry.crossplane.io_spaceroles.yaml @@ -185,9 +185,6 @@ spec: description: (String) The username of the Cloud Foundry user to assign the role to. type: string - required: - - type - - username type: object managementPolicies: default: @@ -445,14 +442,14 @@ spec: - spec type: object x-kubernetes-validations: + - message: type is required + rule: self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.type) + - message: username is required + rule: self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.username) - message: 'SpaceReference is required: exactly one of spaceName, spaceRef, or spaceSelector must be set' rule: self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.spaceName) || has(self.spec.forProvider.spaceRef) || has(self.spec.forProvider.spaceSelector)) - - message: 'SpaceReference validation: only one of spaceName, spaceRef, or - spaceSelector can be set' - rule: '[has(self.spec.forProvider.spaceName), has(self.spec.forProvider.spaceRef), - has(self.spec.forProvider.spaceSelector)].filter(x, x).size() <= 1' served: true storage: true subresources: diff --git a/package/crds/cloudfoundry.crossplane.io_spaces.yaml b/package/crds/cloudfoundry.crossplane.io_spaces.yaml index 418680b7..c777be02 100644 --- a/package/crds/cloudfoundry.crossplane.io_spaces.yaml +++ b/package/crds/cloudfoundry.crossplane.io_spaces.yaml @@ -183,8 +183,6 @@ spec: type: string type: object type: object - required: - - name type: object managementPolicies: default: @@ -461,6 +459,13 @@ spec: required: - spec type: object + x-kubernetes-validations: + - message: name is required + rule: self.spec.managementPolicies == ['Observe'] || has(self.spec.forProvider.name) + - message: 'OrgReference is required: exactly one of orgName, orgRef, or orgSelector + must be set' + rule: self.spec.managementPolicies == ['Observe'] || (has(self.spec.forProvider.orgName) + || has(self.spec.forProvider.orgRef) || has(self.spec.forProvider.orgSelector)) served: true storage: true subresources: