diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 339c610..95b3693 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,14 +10,18 @@ on: env: # Common versions - GO_VERSION: '1.19' - GOLANGCI_VERSION: 'v1.50.0' + GO_VERSION: '1.20' + GOLANGCI_VERSION: 'v1.53.3' DOCKER_BUILDX_VERSION: 'v0.8.2' # Common users. We can't run a step 'if secrets.XXX != ""' but we can run a # step 'if env.XXX != ""', so we copy these to succinctly test whether # credentials have been provided before trying to run steps that need them. UPBOUND_MARKETPLACE_PUSH_ROBOT_USR: ${{ secrets.UPBOUND_MARKETPLACE_PUSH_ROBOT_USR }} + UPBOUND_MARKETPLACE_TOKEN: ${{ secrets.UPBOUND_MARKETPLACE_TOKEN }} + REGISTRY_ORGS: ${{ secrets.REGISTRY_ORGS }} + XPKG_REG_ORGS: ${{ secrets.XPKG_REG_ORGS }} + XPKG_REG_ORGS_NO_PROMOTE: ${{ secrets.XPKG_REG_ORGS_NO_PROMOTE }} jobs: detect-noop: diff --git a/.golangci.yml b/.golangci.yml index 494a907..ef48c62 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -38,7 +38,7 @@ linters-settings: goimports: # put imports beginning with prefix after 3rd-party packages; # it's a comma-separated list of prefixes - local-prefixes: github.com/upbound/upjet-provider-template + local-prefixes: github.com/saagie/upjet-provider-ovh gocyclo: # minimal code complexity to report, 30 by default (but we recommend 10-20) diff --git a/Makefile b/Makefile index a9c9cdd..eb24d75 100644 --- a/Makefile +++ b/Makefile @@ -1,19 +1,18 @@ # ==================================================================================== # Setup Project -PROJECT_NAME ?= upjet-provider-template -PROJECT_REPO ?= github.com/upbound/$(PROJECT_NAME) +PROJECT_NAME ?= upjet-provider-ovh +PROJECT_REPO ?= github.com/saagie/$(PROJECT_NAME) export TERRAFORM_VERSION ?= 1.2.1 -export TERRAFORM_PROVIDER_SOURCE ?= hashicorp/null -export TERRAFORM_PROVIDER_REPO ?= https://github.com/hashicorp/terraform-provider-null -export TERRAFORM_PROVIDER_VERSION ?= 3.1.0 -export TERRAFORM_PROVIDER_DOWNLOAD_NAME ?= terraform-provider-null +export TERRAFORM_PROVIDER_SOURCE ?= ovh/ovh +export TERRAFORM_PROVIDER_REPO ?= https://github.com/ovh/terraform-provider-ovh +export TERRAFORM_PROVIDER_VERSION ?= 0.35.0 +export TERRAFORM_PROVIDER_DOWNLOAD_NAME ?= terraform-provider-ovh export TERRAFORM_PROVIDER_DOWNLOAD_URL_PREFIX ?= https://releases.hashicorp.com/$(TERRAFORM_PROVIDER_DOWNLOAD_NAME)/$(TERRAFORM_PROVIDER_VERSION) -export TERRAFORM_NATIVE_PROVIDER_BINARY ?= terraform-provider-null_v3.1.0_x5 -export TERRAFORM_DOCS_PATH ?= docs/resources - +export TERRAFORM_NATIVE_PROVIDER_BINARY ?= terraform-provider-ovh_0.35.0_x5 +export TERRAFORM_DOCS_PATH ?= website/docs/r PLATFORMS ?= linux_amd64 linux_arm64 @@ -158,7 +157,7 @@ submodules: run: go.build @$(INFO) Running Crossplane locally out-of-cluster . . . @# To see other arguments that can be provided, run the command with --help instead - UPBOUND_CONTEXT="local" $(GO_OUT_DIR)/provider --debug + UPBOUND_CONTEXT="local" $(GO_OUT_DIR)/provider --debug --enable-management-policies # ==================================================================================== # End to End Testing diff --git a/OWNERS.md b/OWNERS.md index 599b40e..52e22ad 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -1,13 +1,14 @@ # OWNERS -This page lists all maintainers for **this** repository. Each repository in the [Upbound -organization](https://github.com/upbound/) will list their repository maintainers in their own +This page lists all maintainers for **this** repository. Each repository in the [Crossplane +organization](https://github.com/crossplane/) will list their repository maintainers in their own `OWNERS.md` file. +Please see the Crossplane +[GOVERNANCE.md](https://github.com/crossplane/crossplane/blob/master/GOVERNANCE.md) for governance +guidelines and responsibilities for the steering committee and maintainers. ## Maintainers -* Alper Ulucinar ([ulucinar](https://github.com/ulucinar)) -* Sergen Yalcin ([sergenyalcin](https://github.com/sergenyalcin)) - -See [CODEOWNERS](./CODEOWNERS) for automatic PR assignment. +* Maintainer 1 ([maintainer1](https://github.com/maintainer1)) +* Maintainer 2 ([maintainer1](https://github.com/maintainer2)) diff --git a/README.md b/README.md index e57c399..dc3344e 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ -# Provider Template +# Provider Ovh -`upjet-provider-template` is a [Crossplane](https://crossplane.io/) provider that +`provider-ovh` is a [Crossplane](https://crossplane.io/) provider that is built using [Upjet](https://github.com/crossplane/upjet) code generation tools and exposes XRM-conformant managed resources for the -Template API. +Ovh API. ## Getting Started Install the provider by using the following command after changing the image tag -to the [latest release](https://marketplace.upbound.io/providers/upbound/upjet-provider-template): +to the [latest release](https://marketplace.upbound.io/providers/upjet-provider-ovh): ``` -up ctp provider install upbound/upjet-provider-template:v0.1.0 +up ctp provider install upjet-provider-ovh:v0.1.0 ``` Alternatively, you can use declarative installation: @@ -19,15 +19,15 @@ cat < +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type DatabaseInitParameters struct { + + // Advanced configuration key / value. + // Advanced configuration key / value + AdvancedConfiguration map[string]*string `json:"advancedConfiguration,omitempty" tf:"advanced_configuration,omitempty"` + + // Small description of the database service. + // Description of the cluster + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // The disk size (in GB) of the database service. + // Disk size attributes of the cluster + DiskSize *float64 `json:"diskSize,omitempty" tf:"disk_size,omitempty"` + + // The database engine you want to deploy. To get a full list of available engine visit. + // public documentation. + // Name of the engine of the service + Engine *string `json:"engine,omitempty" tf:"engine,omitempty"` + + // A valid OVHcloud public cloud database flavor name in which the nodes will be started. + // Ex: "db1-7". Changing this value upgrade the nodes with the new flavor. + // You can find the list of flavor names: https://www.ovhcloud.com/fr/public-cloud/prices/ + // The node flavor used for this cluster + Flavor *string `json:"flavor,omitempty" tf:"flavor,omitempty"` + + // Defines whether the REST API is enabled on a kafka cluster + // Defines whether the REST API is enabled on a Kafka cluster + KafkaRestAPI *bool `json:"kafkaRestApi,omitempty" tf:"kafka_rest_api,omitempty"` + + // List of nodes object. + // Multi region cluster are not yet available, all node should be identical. + // List of nodes composing the service + Nodes []NodesInitParameters `json:"nodes,omitempty" tf:"nodes,omitempty"` + + // Defines whether the ACLs are enabled on an OpenSearch cluster + // Defines whether the ACLs are enabled on an Opensearch cluster + OpensearchAclsEnabled *bool `json:"opensearchAclsEnabled,omitempty" tf:"opensearch_acls_enabled,omitempty"` + + // Plan of the cluster. + // Enum: "essential", "business", "enterprise". + // Plan of the cluster + Plan *string `json:"plan,omitempty" tf:"plan,omitempty"` + + // The id of the public cloud project. If omitted, + // the OVH_CLOUD_PROJECT_SERVICE environment variable is used. + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // The version of the engine in which the service should be deployed + // Version of the engine deployed on the cluster + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +type DatabaseObservation struct { + + // Advanced configuration key / value. + // Advanced configuration key / value + AdvancedConfiguration map[string]*string `json:"advancedConfiguration,omitempty" tf:"advanced_configuration,omitempty"` + + // Time on which backups start every day. + // Time on which backups start every day + BackupTime *string `json:"backupTime,omitempty" tf:"backup_time,omitempty"` + + // Date of the creation of the cluster. + // Date of the creation of the cluster + CreatedAt *string `json:"createdAt,omitempty" tf:"created_at,omitempty"` + + // Small description of the database service. + // Description of the cluster + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // The disk size (in GB) of the database service. + // Disk size attributes of the cluster + DiskSize *float64 `json:"diskSize,omitempty" tf:"disk_size,omitempty"` + + // Defines the disk type of the database service. + // Disk type attributes of the cluster + DiskType *string `json:"diskType,omitempty" tf:"disk_type,omitempty"` + + // List of all endpoints objects of the service. + // List of all endpoints of the service + Endpoints []EndpointsObservation `json:"endpoints,omitempty" tf:"endpoints,omitempty"` + + // The database engine you want to deploy. To get a full list of available engine visit. + // public documentation. + // Name of the engine of the service + Engine *string `json:"engine,omitempty" tf:"engine,omitempty"` + + // A valid OVHcloud public cloud database flavor name in which the nodes will be started. + // Ex: "db1-7". Changing this value upgrade the nodes with the new flavor. + // You can find the list of flavor names: https://www.ovhcloud.com/fr/public-cloud/prices/ + // The node flavor used for this cluster + Flavor *string `json:"flavor,omitempty" tf:"flavor,omitempty"` + + // Public Cloud Database Service ID + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // Defines whether the REST API is enabled on a kafka cluster + // Defines whether the REST API is enabled on a Kafka cluster + KafkaRestAPI *bool `json:"kafkaRestApi,omitempty" tf:"kafka_rest_api,omitempty"` + + // Time on which maintenances can start every day. + // Time on which maintenances can start every day + MaintenanceTime *string `json:"maintenanceTime,omitempty" tf:"maintenance_time,omitempty"` + + // Type of network of the cluster. + // Type of network of the cluster + NetworkType *string `json:"networkType,omitempty" tf:"network_type,omitempty"` + + // List of nodes object. + // Multi region cluster are not yet available, all node should be identical. + // List of nodes composing the service + Nodes []NodesObservation `json:"nodes,omitempty" tf:"nodes,omitempty"` + + // Defines whether the ACLs are enabled on an OpenSearch cluster + // Defines whether the ACLs are enabled on an Opensearch cluster + OpensearchAclsEnabled *bool `json:"opensearchAclsEnabled,omitempty" tf:"opensearch_acls_enabled,omitempty"` + + // Plan of the cluster. + // Enum: "essential", "business", "enterprise". + // Plan of the cluster + Plan *string `json:"plan,omitempty" tf:"plan,omitempty"` + + // The id of the public cloud project. If omitted, + // the OVH_CLOUD_PROJECT_SERVICE environment variable is used. + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // Current status of the cluster. + // Current status of the cluster + Status *string `json:"status,omitempty" tf:"status,omitempty"` + + // The version of the engine in which the service should be deployed + // Version of the engine deployed on the cluster + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +type DatabaseParameters struct { + + // Advanced configuration key / value. + // Advanced configuration key / value + // +kubebuilder:validation:Optional + AdvancedConfiguration map[string]*string `json:"advancedConfiguration,omitempty" tf:"advanced_configuration,omitempty"` + + // Small description of the database service. + // Description of the cluster + // +kubebuilder:validation:Optional + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // The disk size (in GB) of the database service. + // Disk size attributes of the cluster + // +kubebuilder:validation:Optional + DiskSize *float64 `json:"diskSize,omitempty" tf:"disk_size,omitempty"` + + // The database engine you want to deploy. To get a full list of available engine visit. + // public documentation. + // Name of the engine of the service + // +kubebuilder:validation:Optional + Engine *string `json:"engine,omitempty" tf:"engine,omitempty"` + + // A valid OVHcloud public cloud database flavor name in which the nodes will be started. + // Ex: "db1-7". Changing this value upgrade the nodes with the new flavor. + // You can find the list of flavor names: https://www.ovhcloud.com/fr/public-cloud/prices/ + // The node flavor used for this cluster + // +kubebuilder:validation:Optional + Flavor *string `json:"flavor,omitempty" tf:"flavor,omitempty"` + + // Defines whether the REST API is enabled on a kafka cluster + // Defines whether the REST API is enabled on a Kafka cluster + // +kubebuilder:validation:Optional + KafkaRestAPI *bool `json:"kafkaRestApi,omitempty" tf:"kafka_rest_api,omitempty"` + + // List of nodes object. + // Multi region cluster are not yet available, all node should be identical. + // List of nodes composing the service + // +kubebuilder:validation:Optional + Nodes []NodesParameters `json:"nodes,omitempty" tf:"nodes,omitempty"` + + // Defines whether the ACLs are enabled on an OpenSearch cluster + // Defines whether the ACLs are enabled on an Opensearch cluster + // +kubebuilder:validation:Optional + OpensearchAclsEnabled *bool `json:"opensearchAclsEnabled,omitempty" tf:"opensearch_acls_enabled,omitempty"` + + // Plan of the cluster. + // Enum: "essential", "business", "enterprise". + // Plan of the cluster + // +kubebuilder:validation:Optional + Plan *string `json:"plan,omitempty" tf:"plan,omitempty"` + + // The id of the public cloud project. If omitted, + // the OVH_CLOUD_PROJECT_SERVICE environment variable is used. + // +kubebuilder:validation:Optional + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // The version of the engine in which the service should be deployed + // Version of the engine deployed on the cluster + // +kubebuilder:validation:Optional + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +type EndpointsInitParameters struct { +} + +type EndpointsObservation struct { + + // Type of component the URI relates to. + Component *string `json:"component,omitempty" tf:"component,omitempty"` + + // Domain of the cluster. + Domain *string `json:"domain,omitempty" tf:"domain,omitempty"` + + // Path of the endpoint. + Path *string `json:"path,omitempty" tf:"path,omitempty"` + + // Connection port for the endpoint. + Port *float64 `json:"port,omitempty" tf:"port,omitempty"` + + // Defines whether the endpoint uses SSL. + SSL *bool `json:"ssl,omitempty" tf:"ssl,omitempty"` + + // SSL mode used to connect to the service if the SSL is enabled. + SSLMode *string `json:"sslMode,omitempty" tf:"ssl_mode,omitempty"` + + // Scheme used to generate the URI. + Scheme *string `json:"scheme,omitempty" tf:"scheme,omitempty"` + + // URI of the endpoint. + URI *string `json:"uri,omitempty" tf:"uri,omitempty"` +} + +type EndpointsParameters struct { +} + +type NodesInitParameters struct { + + // Private network id in which the node should be deployed. It's the regional openstackId of the private network + // Private network ID in which the node is. It's the regional openstackId of the private network. + NetworkID *string `json:"networkId,omitempty" tf:"network_id,omitempty"` + + // Public cloud region in which the node should be deployed. + // Ex: "GRA'. + // Region of the node + Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // Private subnet ID in which the node is. + // Private subnet ID in which the node is + SubnetID *string `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` +} + +type NodesObservation struct { + + // Private network id in which the node should be deployed. It's the regional openstackId of the private network + // Private network ID in which the node is. It's the regional openstackId of the private network. + NetworkID *string `json:"networkId,omitempty" tf:"network_id,omitempty"` + + // Public cloud region in which the node should be deployed. + // Ex: "GRA'. + // Region of the node + Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // Private subnet ID in which the node is. + // Private subnet ID in which the node is + SubnetID *string `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` +} + +type NodesParameters struct { + + // Private network id in which the node should be deployed. It's the regional openstackId of the private network + // Private network ID in which the node is. It's the regional openstackId of the private network. + // +kubebuilder:validation:Optional + NetworkID *string `json:"networkId,omitempty" tf:"network_id,omitempty"` + + // Public cloud region in which the node should be deployed. + // Ex: "GRA'. + // Region of the node + // +kubebuilder:validation:Optional + Region *string `json:"region" tf:"region,omitempty"` + + // Private subnet ID in which the node is. + // Private subnet ID in which the node is + // +kubebuilder:validation:Optional + SubnetID *string `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` +} + +// DatabaseSpec defines the desired state of Database +type DatabaseSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider DatabaseParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider DatabaseInitParameters `json:"initProvider,omitempty"` +} + +// DatabaseStatus defines the observed state of Database. +type DatabaseStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider DatabaseObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true + +// Database is the Schema for the Databases API. +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:subresource:status +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,ovh} +type Database struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.engine) || (has(self.initProvider) && has(self.initProvider.engine))",message="spec.forProvider.engine is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.flavor) || (has(self.initProvider) && has(self.initProvider.flavor))",message="spec.forProvider.flavor is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.nodes) || (has(self.initProvider) && has(self.initProvider.nodes))",message="spec.forProvider.nodes is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.plan) || (has(self.initProvider) && has(self.initProvider.plan))",message="spec.forProvider.plan is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.serviceName) || (has(self.initProvider) && has(self.initProvider.serviceName))",message="spec.forProvider.serviceName is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.version) || (has(self.initProvider) && has(self.initProvider.version))",message="spec.forProvider.version is a required parameter" + Spec DatabaseSpec `json:"spec"` + Status DatabaseStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// DatabaseList contains a list of Databases +type DatabaseList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Database `json:"items"` +} + +// Repository type metadata. +var ( + Database_Kind = "Database" + Database_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: Database_Kind}.String() + Database_KindAPIVersion = Database_Kind + "." + CRDGroupVersion.String() + Database_GroupVersionKind = CRDGroupVersion.WithKind(Database_Kind) +) + +func init() { + SchemeBuilder.Register(&Database{}, &DatabaseList{}) +} diff --git a/apis/database/v1alpha1/zz_generated.deepcopy.go b/apis/database/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 0000000..a175246 --- /dev/null +++ b/apis/database/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,573 @@ +//go:build !ignore_autogenerated + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by controller-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Database) DeepCopyInto(out *Database) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Database. +func (in *Database) DeepCopy() *Database { + if in == nil { + return nil + } + out := new(Database) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Database) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DatabaseInitParameters) DeepCopyInto(out *DatabaseInitParameters) { + *out = *in + if in.AdvancedConfiguration != nil { + in, out := &in.AdvancedConfiguration, &out.AdvancedConfiguration + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.DiskSize != nil { + in, out := &in.DiskSize, &out.DiskSize + *out = new(float64) + **out = **in + } + if in.Engine != nil { + in, out := &in.Engine, &out.Engine + *out = new(string) + **out = **in + } + if in.Flavor != nil { + in, out := &in.Flavor, &out.Flavor + *out = new(string) + **out = **in + } + if in.KafkaRestAPI != nil { + in, out := &in.KafkaRestAPI, &out.KafkaRestAPI + *out = new(bool) + **out = **in + } + if in.Nodes != nil { + in, out := &in.Nodes, &out.Nodes + *out = make([]NodesInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.OpensearchAclsEnabled != nil { + in, out := &in.OpensearchAclsEnabled, &out.OpensearchAclsEnabled + *out = new(bool) + **out = **in + } + if in.Plan != nil { + in, out := &in.Plan, &out.Plan + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DatabaseInitParameters. +func (in *DatabaseInitParameters) DeepCopy() *DatabaseInitParameters { + if in == nil { + return nil + } + out := new(DatabaseInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DatabaseList) DeepCopyInto(out *DatabaseList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Database, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DatabaseList. +func (in *DatabaseList) DeepCopy() *DatabaseList { + if in == nil { + return nil + } + out := new(DatabaseList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DatabaseList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DatabaseObservation) DeepCopyInto(out *DatabaseObservation) { + *out = *in + if in.AdvancedConfiguration != nil { + in, out := &in.AdvancedConfiguration, &out.AdvancedConfiguration + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.BackupTime != nil { + in, out := &in.BackupTime, &out.BackupTime + *out = new(string) + **out = **in + } + if in.CreatedAt != nil { + in, out := &in.CreatedAt, &out.CreatedAt + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.DiskSize != nil { + in, out := &in.DiskSize, &out.DiskSize + *out = new(float64) + **out = **in + } + if in.DiskType != nil { + in, out := &in.DiskType, &out.DiskType + *out = new(string) + **out = **in + } + if in.Endpoints != nil { + in, out := &in.Endpoints, &out.Endpoints + *out = make([]EndpointsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Engine != nil { + in, out := &in.Engine, &out.Engine + *out = new(string) + **out = **in + } + if in.Flavor != nil { + in, out := &in.Flavor, &out.Flavor + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.KafkaRestAPI != nil { + in, out := &in.KafkaRestAPI, &out.KafkaRestAPI + *out = new(bool) + **out = **in + } + if in.MaintenanceTime != nil { + in, out := &in.MaintenanceTime, &out.MaintenanceTime + *out = new(string) + **out = **in + } + if in.NetworkType != nil { + in, out := &in.NetworkType, &out.NetworkType + *out = new(string) + **out = **in + } + if in.Nodes != nil { + in, out := &in.Nodes, &out.Nodes + *out = make([]NodesObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.OpensearchAclsEnabled != nil { + in, out := &in.OpensearchAclsEnabled, &out.OpensearchAclsEnabled + *out = new(bool) + **out = **in + } + if in.Plan != nil { + in, out := &in.Plan, &out.Plan + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DatabaseObservation. +func (in *DatabaseObservation) DeepCopy() *DatabaseObservation { + if in == nil { + return nil + } + out := new(DatabaseObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DatabaseParameters) DeepCopyInto(out *DatabaseParameters) { + *out = *in + if in.AdvancedConfiguration != nil { + in, out := &in.AdvancedConfiguration, &out.AdvancedConfiguration + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.DiskSize != nil { + in, out := &in.DiskSize, &out.DiskSize + *out = new(float64) + **out = **in + } + if in.Engine != nil { + in, out := &in.Engine, &out.Engine + *out = new(string) + **out = **in + } + if in.Flavor != nil { + in, out := &in.Flavor, &out.Flavor + *out = new(string) + **out = **in + } + if in.KafkaRestAPI != nil { + in, out := &in.KafkaRestAPI, &out.KafkaRestAPI + *out = new(bool) + **out = **in + } + if in.Nodes != nil { + in, out := &in.Nodes, &out.Nodes + *out = make([]NodesParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.OpensearchAclsEnabled != nil { + in, out := &in.OpensearchAclsEnabled, &out.OpensearchAclsEnabled + *out = new(bool) + **out = **in + } + if in.Plan != nil { + in, out := &in.Plan, &out.Plan + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DatabaseParameters. +func (in *DatabaseParameters) DeepCopy() *DatabaseParameters { + if in == nil { + return nil + } + out := new(DatabaseParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DatabaseSpec) DeepCopyInto(out *DatabaseSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DatabaseSpec. +func (in *DatabaseSpec) DeepCopy() *DatabaseSpec { + if in == nil { + return nil + } + out := new(DatabaseSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DatabaseStatus) DeepCopyInto(out *DatabaseStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DatabaseStatus. +func (in *DatabaseStatus) DeepCopy() *DatabaseStatus { + if in == nil { + return nil + } + out := new(DatabaseStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EndpointsInitParameters) DeepCopyInto(out *EndpointsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointsInitParameters. +func (in *EndpointsInitParameters) DeepCopy() *EndpointsInitParameters { + if in == nil { + return nil + } + out := new(EndpointsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EndpointsObservation) DeepCopyInto(out *EndpointsObservation) { + *out = *in + if in.Component != nil { + in, out := &in.Component, &out.Component + *out = new(string) + **out = **in + } + if in.Domain != nil { + in, out := &in.Domain, &out.Domain + *out = new(string) + **out = **in + } + if in.Path != nil { + in, out := &in.Path, &out.Path + *out = new(string) + **out = **in + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = new(float64) + **out = **in + } + if in.SSL != nil { + in, out := &in.SSL, &out.SSL + *out = new(bool) + **out = **in + } + if in.SSLMode != nil { + in, out := &in.SSLMode, &out.SSLMode + *out = new(string) + **out = **in + } + if in.Scheme != nil { + in, out := &in.Scheme, &out.Scheme + *out = new(string) + **out = **in + } + if in.URI != nil { + in, out := &in.URI, &out.URI + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointsObservation. +func (in *EndpointsObservation) DeepCopy() *EndpointsObservation { + if in == nil { + return nil + } + out := new(EndpointsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EndpointsParameters) DeepCopyInto(out *EndpointsParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointsParameters. +func (in *EndpointsParameters) DeepCopy() *EndpointsParameters { + if in == nil { + return nil + } + out := new(EndpointsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodesInitParameters) DeepCopyInto(out *NodesInitParameters) { + *out = *in + if in.NetworkID != nil { + in, out := &in.NetworkID, &out.NetworkID + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodesInitParameters. +func (in *NodesInitParameters) DeepCopy() *NodesInitParameters { + if in == nil { + return nil + } + out := new(NodesInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodesObservation) DeepCopyInto(out *NodesObservation) { + *out = *in + if in.NetworkID != nil { + in, out := &in.NetworkID, &out.NetworkID + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodesObservation. +func (in *NodesObservation) DeepCopy() *NodesObservation { + if in == nil { + return nil + } + out := new(NodesObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodesParameters) DeepCopyInto(out *NodesParameters) { + *out = *in + if in.NetworkID != nil { + in, out := &in.NetworkID, &out.NetworkID + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodesParameters. +func (in *NodesParameters) DeepCopy() *NodesParameters { + if in == nil { + return nil + } + out := new(NodesParameters) + in.DeepCopyInto(out) + return out +} diff --git a/apis/database/v1alpha1/zz_generated.managed.go b/apis/database/v1alpha1/zz_generated.managed.go new file mode 100644 index 0000000..d26a029 --- /dev/null +++ b/apis/database/v1alpha1/zz_generated.managed.go @@ -0,0 +1,68 @@ +/* +Copyright 2022 Upbound Inc. +*/ +// Code generated by angryjet. DO NOT EDIT. + +package v1alpha1 + +import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" + +// GetCondition of this Database. +func (mg *Database) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this Database. +func (mg *Database) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this Database. +func (mg *Database) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this Database. +func (mg *Database) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this Database. +func (mg *Database) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this Database. +func (mg *Database) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this Database. +func (mg *Database) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this Database. +func (mg *Database) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this Database. +func (mg *Database) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this Database. +func (mg *Database) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this Database. +func (mg *Database) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this Database. +func (mg *Database) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} diff --git a/apis/null/v1alpha1/zz_generated.managedlist.go b/apis/database/v1alpha1/zz_generated.managedlist.go similarity index 76% rename from apis/null/v1alpha1/zz_generated.managedlist.go rename to apis/database/v1alpha1/zz_generated.managedlist.go index c589209..fd04d75 100644 --- a/apis/null/v1alpha1/zz_generated.managedlist.go +++ b/apis/database/v1alpha1/zz_generated.managedlist.go @@ -7,8 +7,8 @@ package v1alpha1 import resource "github.com/crossplane/crossplane-runtime/pkg/resource" -// GetItems of this ResourceList. -func (l *ResourceList) GetItems() []resource.Managed { +// GetItems of this DatabaseList. +func (l *DatabaseList) GetItems() []resource.Managed { items := make([]resource.Managed, len(l.Items)) for i := range l.Items { items[i] = &l.Items[i] diff --git a/apis/database/v1alpha1/zz_generated_terraformed.go b/apis/database/v1alpha1/zz_generated_terraformed.go new file mode 100755 index 0000000..025dd95 --- /dev/null +++ b/apis/database/v1alpha1/zz_generated_terraformed.go @@ -0,0 +1,133 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Database +func (mg *Database) GetTerraformResourceType() string { + return "ovh_cloud_project_database" +} + +// GetConnectionDetailsMapping for this Database +func (tr *Database) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this Database +func (tr *Database) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Database +func (tr *Database) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Database +func (tr *Database) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Database +func (tr *Database) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Database +func (tr *Database) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Database +func (tr *Database) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Database +func (tr *Database) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Database using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Database) LateInitialize(attrs []byte) (bool, error) { + params := &DatabaseParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *Database) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/database/v1alpha1/zz_groupversion_info.go b/apis/database/v1alpha1/zz_groupversion_info.go new file mode 100755 index 0000000..f77fed2 --- /dev/null +++ b/apis/database/v1alpha1/zz_groupversion_info.go @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +// +kubebuilder:object:generate=true +// +groupName=database.cloud.ovh.saagie.io +// +versionName=v1alpha1 +package v1alpha1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +// Package type metadata. +const ( + CRDGroup = "database.cloud.ovh.saagie.io" + CRDVersion = "v1alpha1" +) + +var ( + // CRDGroupVersion is the API Group Version used to register the objects + CRDGroupVersion = schema.GroupVersion{Group: CRDGroup, Version: CRDVersion} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme + SchemeBuilder = &scheme.Builder{GroupVersion: CRDGroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + AddToScheme = SchemeBuilder.AddToScheme +) diff --git a/apis/generate.go b/apis/generate.go index 233d170..f93733f 100644 --- a/apis/generate.go +++ b/apis/generate.go @@ -19,7 +19,7 @@ Copyright 2021 Upbound Inc. //go:generate rm -rf ../examples-generated // Generate documentation from Terraform docs. -//go:generate go run github.com/crossplane/upjet/cmd/scraper -n ${TERRAFORM_PROVIDER_SOURCE} -r ../.work/${TERRAFORM_PROVIDER_SOURCE}/${TERRAFORM_DOCS_PATH} -o ../config/provider-metadata.yaml +//go:generate go run github.com/crossplane/upjet/cmd/scraper -n ${TERRAFORM_PROVIDER_SOURCE} -r ../.work/${TERRAFORM_PROVIDER_SOURCE}/${TERRAFORM_DOCS_PATH} -o ../config/provider-metadata.yaml --prelude-xpath "//text()[contains(., \"subcategory\")]" // Run Upjet generator //go:generate go run ../cmd/generator/main.go .. diff --git a/apis/kube/v1alpha1/zz_generated.deepcopy.go b/apis/kube/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 0000000..203fe57 --- /dev/null +++ b/apis/kube/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,2204 @@ +//go:build !ignore_autogenerated + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by controller-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "github.com/crossplane/crossplane-runtime/apis/common/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AdmissionpluginsInitParameters) DeepCopyInto(out *AdmissionpluginsInitParameters) { + *out = *in + if in.Disabled != nil { + in, out := &in.Disabled, &out.Disabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdmissionpluginsInitParameters. +func (in *AdmissionpluginsInitParameters) DeepCopy() *AdmissionpluginsInitParameters { + if in == nil { + return nil + } + out := new(AdmissionpluginsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AdmissionpluginsObservation) DeepCopyInto(out *AdmissionpluginsObservation) { + *out = *in + if in.Disabled != nil { + in, out := &in.Disabled, &out.Disabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdmissionpluginsObservation. +func (in *AdmissionpluginsObservation) DeepCopy() *AdmissionpluginsObservation { + if in == nil { + return nil + } + out := new(AdmissionpluginsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AdmissionpluginsParameters) DeepCopyInto(out *AdmissionpluginsParameters) { + *out = *in + if in.Disabled != nil { + in, out := &in.Disabled, &out.Disabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdmissionpluginsParameters. +func (in *AdmissionpluginsParameters) DeepCopy() *AdmissionpluginsParameters { + if in == nil { + return nil + } + out := new(AdmissionpluginsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ApiserverInitParameters) DeepCopyInto(out *ApiserverInitParameters) { + *out = *in + if in.Admissionplugins != nil { + in, out := &in.Admissionplugins, &out.Admissionplugins + *out = make([]AdmissionpluginsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApiserverInitParameters. +func (in *ApiserverInitParameters) DeepCopy() *ApiserverInitParameters { + if in == nil { + return nil + } + out := new(ApiserverInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ApiserverObservation) DeepCopyInto(out *ApiserverObservation) { + *out = *in + if in.Admissionplugins != nil { + in, out := &in.Admissionplugins, &out.Admissionplugins + *out = make([]AdmissionpluginsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApiserverObservation. +func (in *ApiserverObservation) DeepCopy() *ApiserverObservation { + if in == nil { + return nil + } + out := new(ApiserverObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ApiserverParameters) DeepCopyInto(out *ApiserverParameters) { + *out = *in + if in.Admissionplugins != nil { + in, out := &in.Admissionplugins, &out.Admissionplugins + *out = make([]AdmissionpluginsParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApiserverParameters. +func (in *ApiserverParameters) DeepCopy() *ApiserverParameters { + if in == nil { + return nil + } + out := new(ApiserverParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationApiserverAdmissionpluginsInitParameters) DeepCopyInto(out *CustomizationApiserverAdmissionpluginsInitParameters) { + *out = *in + if in.Disabled != nil { + in, out := &in.Disabled, &out.Disabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationApiserverAdmissionpluginsInitParameters. +func (in *CustomizationApiserverAdmissionpluginsInitParameters) DeepCopy() *CustomizationApiserverAdmissionpluginsInitParameters { + if in == nil { + return nil + } + out := new(CustomizationApiserverAdmissionpluginsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationApiserverAdmissionpluginsObservation) DeepCopyInto(out *CustomizationApiserverAdmissionpluginsObservation) { + *out = *in + if in.Disabled != nil { + in, out := &in.Disabled, &out.Disabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationApiserverAdmissionpluginsObservation. +func (in *CustomizationApiserverAdmissionpluginsObservation) DeepCopy() *CustomizationApiserverAdmissionpluginsObservation { + if in == nil { + return nil + } + out := new(CustomizationApiserverAdmissionpluginsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationApiserverAdmissionpluginsParameters) DeepCopyInto(out *CustomizationApiserverAdmissionpluginsParameters) { + *out = *in + if in.Disabled != nil { + in, out := &in.Disabled, &out.Disabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationApiserverAdmissionpluginsParameters. +func (in *CustomizationApiserverAdmissionpluginsParameters) DeepCopy() *CustomizationApiserverAdmissionpluginsParameters { + if in == nil { + return nil + } + out := new(CustomizationApiserverAdmissionpluginsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationApiserverInitParameters) DeepCopyInto(out *CustomizationApiserverInitParameters) { + *out = *in + if in.Admissionplugins != nil { + in, out := &in.Admissionplugins, &out.Admissionplugins + *out = make([]CustomizationApiserverAdmissionpluginsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationApiserverInitParameters. +func (in *CustomizationApiserverInitParameters) DeepCopy() *CustomizationApiserverInitParameters { + if in == nil { + return nil + } + out := new(CustomizationApiserverInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationApiserverObservation) DeepCopyInto(out *CustomizationApiserverObservation) { + *out = *in + if in.Admissionplugins != nil { + in, out := &in.Admissionplugins, &out.Admissionplugins + *out = make([]CustomizationApiserverAdmissionpluginsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationApiserverObservation. +func (in *CustomizationApiserverObservation) DeepCopy() *CustomizationApiserverObservation { + if in == nil { + return nil + } + out := new(CustomizationApiserverObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationApiserverParameters) DeepCopyInto(out *CustomizationApiserverParameters) { + *out = *in + if in.Admissionplugins != nil { + in, out := &in.Admissionplugins, &out.Admissionplugins + *out = make([]CustomizationApiserverAdmissionpluginsParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationApiserverParameters. +func (in *CustomizationApiserverParameters) DeepCopy() *CustomizationApiserverParameters { + if in == nil { + return nil + } + out := new(CustomizationApiserverParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationInitParameters) DeepCopyInto(out *CustomizationInitParameters) { + *out = *in + if in.Apiserver != nil { + in, out := &in.Apiserver, &out.Apiserver + *out = make([]ApiserverInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationInitParameters. +func (in *CustomizationInitParameters) DeepCopy() *CustomizationInitParameters { + if in == nil { + return nil + } + out := new(CustomizationInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationKubeProxyInitParameters) DeepCopyInto(out *CustomizationKubeProxyInitParameters) { + *out = *in + if in.Iptables != nil { + in, out := &in.Iptables, &out.Iptables + *out = make([]IptablesInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Ipvs != nil { + in, out := &in.Ipvs, &out.Ipvs + *out = make([]IpvsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationKubeProxyInitParameters. +func (in *CustomizationKubeProxyInitParameters) DeepCopy() *CustomizationKubeProxyInitParameters { + if in == nil { + return nil + } + out := new(CustomizationKubeProxyInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationKubeProxyObservation) DeepCopyInto(out *CustomizationKubeProxyObservation) { + *out = *in + if in.Iptables != nil { + in, out := &in.Iptables, &out.Iptables + *out = make([]IptablesObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Ipvs != nil { + in, out := &in.Ipvs, &out.Ipvs + *out = make([]IpvsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationKubeProxyObservation. +func (in *CustomizationKubeProxyObservation) DeepCopy() *CustomizationKubeProxyObservation { + if in == nil { + return nil + } + out := new(CustomizationKubeProxyObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationKubeProxyParameters) DeepCopyInto(out *CustomizationKubeProxyParameters) { + *out = *in + if in.Iptables != nil { + in, out := &in.Iptables, &out.Iptables + *out = make([]IptablesParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Ipvs != nil { + in, out := &in.Ipvs, &out.Ipvs + *out = make([]IpvsParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationKubeProxyParameters. +func (in *CustomizationKubeProxyParameters) DeepCopy() *CustomizationKubeProxyParameters { + if in == nil { + return nil + } + out := new(CustomizationKubeProxyParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationObservation) DeepCopyInto(out *CustomizationObservation) { + *out = *in + if in.Apiserver != nil { + in, out := &in.Apiserver, &out.Apiserver + *out = make([]ApiserverObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationObservation. +func (in *CustomizationObservation) DeepCopy() *CustomizationObservation { + if in == nil { + return nil + } + out := new(CustomizationObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomizationParameters) DeepCopyInto(out *CustomizationParameters) { + *out = *in + if in.Apiserver != nil { + in, out := &in.Apiserver, &out.Apiserver + *out = make([]ApiserverParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomizationParameters. +func (in *CustomizationParameters) DeepCopy() *CustomizationParameters { + if in == nil { + return nil + } + out := new(CustomizationParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IpRestrictions) DeepCopyInto(out *IpRestrictions) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpRestrictions. +func (in *IpRestrictions) DeepCopy() *IpRestrictions { + if in == nil { + return nil + } + out := new(IpRestrictions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IpRestrictions) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IpRestrictionsInitParameters) DeepCopyInto(out *IpRestrictionsInitParameters) { + *out = *in + if in.Ips != nil { + in, out := &in.Ips, &out.Ips + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpRestrictionsInitParameters. +func (in *IpRestrictionsInitParameters) DeepCopy() *IpRestrictionsInitParameters { + if in == nil { + return nil + } + out := new(IpRestrictionsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IpRestrictionsList) DeepCopyInto(out *IpRestrictionsList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]IpRestrictions, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpRestrictionsList. +func (in *IpRestrictionsList) DeepCopy() *IpRestrictionsList { + if in == nil { + return nil + } + out := new(IpRestrictionsList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IpRestrictionsList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IpRestrictionsObservation) DeepCopyInto(out *IpRestrictionsObservation) { + *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.Ips != nil { + in, out := &in.Ips, &out.Ips + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.KubeID != nil { + in, out := &in.KubeID, &out.KubeID + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpRestrictionsObservation. +func (in *IpRestrictionsObservation) DeepCopy() *IpRestrictionsObservation { + if in == nil { + return nil + } + out := new(IpRestrictionsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IpRestrictionsParameters) DeepCopyInto(out *IpRestrictionsParameters) { + *out = *in + if in.Ips != nil { + in, out := &in.Ips, &out.Ips + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.KubeID != nil { + in, out := &in.KubeID, &out.KubeID + *out = new(string) + **out = **in + } + if in.KubeIDRef != nil { + in, out := &in.KubeIDRef, &out.KubeIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.KubeIDSelector != nil { + in, out := &in.KubeIDSelector, &out.KubeIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpRestrictionsParameters. +func (in *IpRestrictionsParameters) DeepCopy() *IpRestrictionsParameters { + if in == nil { + return nil + } + out := new(IpRestrictionsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IpRestrictionsSpec) DeepCopyInto(out *IpRestrictionsSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpRestrictionsSpec. +func (in *IpRestrictionsSpec) DeepCopy() *IpRestrictionsSpec { + if in == nil { + return nil + } + out := new(IpRestrictionsSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IpRestrictionsStatus) DeepCopyInto(out *IpRestrictionsStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpRestrictionsStatus. +func (in *IpRestrictionsStatus) DeepCopy() *IpRestrictionsStatus { + if in == nil { + return nil + } + out := new(IpRestrictionsStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IptablesInitParameters) DeepCopyInto(out *IptablesInitParameters) { + *out = *in + if in.MinSyncPeriod != nil { + in, out := &in.MinSyncPeriod, &out.MinSyncPeriod + *out = new(string) + **out = **in + } + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IptablesInitParameters. +func (in *IptablesInitParameters) DeepCopy() *IptablesInitParameters { + if in == nil { + return nil + } + out := new(IptablesInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IptablesObservation) DeepCopyInto(out *IptablesObservation) { + *out = *in + if in.MinSyncPeriod != nil { + in, out := &in.MinSyncPeriod, &out.MinSyncPeriod + *out = new(string) + **out = **in + } + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IptablesObservation. +func (in *IptablesObservation) DeepCopy() *IptablesObservation { + if in == nil { + return nil + } + out := new(IptablesObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IptablesParameters) DeepCopyInto(out *IptablesParameters) { + *out = *in + if in.MinSyncPeriod != nil { + in, out := &in.MinSyncPeriod, &out.MinSyncPeriod + *out = new(string) + **out = **in + } + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IptablesParameters. +func (in *IptablesParameters) DeepCopy() *IptablesParameters { + if in == nil { + return nil + } + out := new(IptablesParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IpvsInitParameters) DeepCopyInto(out *IpvsInitParameters) { + *out = *in + if in.MinSyncPeriod != nil { + in, out := &in.MinSyncPeriod, &out.MinSyncPeriod + *out = new(string) + **out = **in + } + if in.Scheduler != nil { + in, out := &in.Scheduler, &out.Scheduler + *out = new(string) + **out = **in + } + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(string) + **out = **in + } + if in.TCPFinTimeout != nil { + in, out := &in.TCPFinTimeout, &out.TCPFinTimeout + *out = new(string) + **out = **in + } + if in.TCPTimeout != nil { + in, out := &in.TCPTimeout, &out.TCPTimeout + *out = new(string) + **out = **in + } + if in.UDPTimeout != nil { + in, out := &in.UDPTimeout, &out.UDPTimeout + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpvsInitParameters. +func (in *IpvsInitParameters) DeepCopy() *IpvsInitParameters { + if in == nil { + return nil + } + out := new(IpvsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IpvsObservation) DeepCopyInto(out *IpvsObservation) { + *out = *in + if in.MinSyncPeriod != nil { + in, out := &in.MinSyncPeriod, &out.MinSyncPeriod + *out = new(string) + **out = **in + } + if in.Scheduler != nil { + in, out := &in.Scheduler, &out.Scheduler + *out = new(string) + **out = **in + } + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(string) + **out = **in + } + if in.TCPFinTimeout != nil { + in, out := &in.TCPFinTimeout, &out.TCPFinTimeout + *out = new(string) + **out = **in + } + if in.TCPTimeout != nil { + in, out := &in.TCPTimeout, &out.TCPTimeout + *out = new(string) + **out = **in + } + if in.UDPTimeout != nil { + in, out := &in.UDPTimeout, &out.UDPTimeout + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpvsObservation. +func (in *IpvsObservation) DeepCopy() *IpvsObservation { + if in == nil { + return nil + } + out := new(IpvsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IpvsParameters) DeepCopyInto(out *IpvsParameters) { + *out = *in + if in.MinSyncPeriod != nil { + in, out := &in.MinSyncPeriod, &out.MinSyncPeriod + *out = new(string) + **out = **in + } + if in.Scheduler != nil { + in, out := &in.Scheduler, &out.Scheduler + *out = new(string) + **out = **in + } + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(string) + **out = **in + } + if in.TCPFinTimeout != nil { + in, out := &in.TCPFinTimeout, &out.TCPFinTimeout + *out = new(string) + **out = **in + } + if in.TCPTimeout != nil { + in, out := &in.TCPTimeout, &out.TCPTimeout + *out = new(string) + **out = **in + } + if in.UDPTimeout != nil { + in, out := &in.UDPTimeout, &out.UDPTimeout + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpvsParameters. +func (in *IpvsParameters) DeepCopy() *IpvsParameters { + if in == nil { + return nil + } + out := new(IpvsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Kube) DeepCopyInto(out *Kube) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Kube. +func (in *Kube) DeepCopy() *Kube { + if in == nil { + return nil + } + out := new(Kube) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Kube) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeInitParameters) DeepCopyInto(out *KubeInitParameters) { + *out = *in + if in.Customization != nil { + in, out := &in.Customization, &out.Customization + *out = make([]CustomizationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.CustomizationApiserver != nil { + in, out := &in.CustomizationApiserver, &out.CustomizationApiserver + *out = make([]CustomizationApiserverInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.CustomizationKubeProxy != nil { + in, out := &in.CustomizationKubeProxy, &out.CustomizationKubeProxy + *out = make([]CustomizationKubeProxyInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.KubeProxyMode != nil { + in, out := &in.KubeProxyMode, &out.KubeProxyMode + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.PrivateNetworkConfiguration != nil { + in, out := &in.PrivateNetworkConfiguration, &out.PrivateNetworkConfiguration + *out = make([]PrivateNetworkConfigurationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.PrivateNetworkID != nil { + in, out := &in.PrivateNetworkID, &out.PrivateNetworkID + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.UpdatePolicy != nil { + in, out := &in.UpdatePolicy, &out.UpdatePolicy + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeInitParameters. +func (in *KubeInitParameters) DeepCopy() *KubeInitParameters { + if in == nil { + return nil + } + out := new(KubeInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeList) DeepCopyInto(out *KubeList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Kube, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeList. +func (in *KubeList) DeepCopy() *KubeList { + if in == nil { + return nil + } + out := new(KubeList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KubeList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeObservation) DeepCopyInto(out *KubeObservation) { + *out = *in + if in.ControlPlaneIsUpToDate != nil { + in, out := &in.ControlPlaneIsUpToDate, &out.ControlPlaneIsUpToDate + *out = new(bool) + **out = **in + } + if in.Customization != nil { + in, out := &in.Customization, &out.Customization + *out = make([]CustomizationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.CustomizationApiserver != nil { + in, out := &in.CustomizationApiserver, &out.CustomizationApiserver + *out = make([]CustomizationApiserverObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.CustomizationKubeProxy != nil { + in, out := &in.CustomizationKubeProxy, &out.CustomizationKubeProxy + *out = make([]CustomizationKubeProxyObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.IsUpToDate != nil { + in, out := &in.IsUpToDate, &out.IsUpToDate + *out = new(bool) + **out = **in + } + if in.KubeProxyMode != nil { + in, out := &in.KubeProxyMode, &out.KubeProxyMode + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.NextUpgradeVersions != nil { + in, out := &in.NextUpgradeVersions, &out.NextUpgradeVersions + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.NodesURL != nil { + in, out := &in.NodesURL, &out.NodesURL + *out = new(string) + **out = **in + } + if in.PrivateNetworkConfiguration != nil { + in, out := &in.PrivateNetworkConfiguration, &out.PrivateNetworkConfiguration + *out = make([]PrivateNetworkConfigurationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.PrivateNetworkID != nil { + in, out := &in.PrivateNetworkID, &out.PrivateNetworkID + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } + if in.URL != nil { + in, out := &in.URL, &out.URL + *out = new(string) + **out = **in + } + if in.UpdatePolicy != nil { + in, out := &in.UpdatePolicy, &out.UpdatePolicy + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeObservation. +func (in *KubeObservation) DeepCopy() *KubeObservation { + if in == nil { + return nil + } + out := new(KubeObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeParameters) DeepCopyInto(out *KubeParameters) { + *out = *in + if in.Customization != nil { + in, out := &in.Customization, &out.Customization + *out = make([]CustomizationParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.CustomizationApiserver != nil { + in, out := &in.CustomizationApiserver, &out.CustomizationApiserver + *out = make([]CustomizationApiserverParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.CustomizationKubeProxy != nil { + in, out := &in.CustomizationKubeProxy, &out.CustomizationKubeProxy + *out = make([]CustomizationKubeProxyParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.KubeProxyMode != nil { + in, out := &in.KubeProxyMode, &out.KubeProxyMode + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.PrivateNetworkConfiguration != nil { + in, out := &in.PrivateNetworkConfiguration, &out.PrivateNetworkConfiguration + *out = make([]PrivateNetworkConfigurationParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.PrivateNetworkID != nil { + in, out := &in.PrivateNetworkID, &out.PrivateNetworkID + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.UpdatePolicy != nil { + in, out := &in.UpdatePolicy, &out.UpdatePolicy + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeParameters. +func (in *KubeParameters) DeepCopy() *KubeParameters { + if in == nil { + return nil + } + out := new(KubeParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeSpec) DeepCopyInto(out *KubeSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeSpec. +func (in *KubeSpec) DeepCopy() *KubeSpec { + if in == nil { + return nil + } + out := new(KubeSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeStatus) DeepCopyInto(out *KubeStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeStatus. +func (in *KubeStatus) DeepCopy() *KubeStatus { + if in == nil { + return nil + } + out := new(KubeStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeconfigAttributesInitParameters) DeepCopyInto(out *KubeconfigAttributesInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeconfigAttributesInitParameters. +func (in *KubeconfigAttributesInitParameters) DeepCopy() *KubeconfigAttributesInitParameters { + if in == nil { + return nil + } + out := new(KubeconfigAttributesInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeconfigAttributesObservation) DeepCopyInto(out *KubeconfigAttributesObservation) { + *out = *in + if in.ClientCertificate != nil { + in, out := &in.ClientCertificate, &out.ClientCertificate + *out = new(string) + **out = **in + } + if in.ClientKey != nil { + in, out := &in.ClientKey, &out.ClientKey + *out = new(string) + **out = **in + } + if in.ClusterCACertificate != nil { + in, out := &in.ClusterCACertificate, &out.ClusterCACertificate + *out = new(string) + **out = **in + } + if in.Host != nil { + in, out := &in.Host, &out.Host + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeconfigAttributesObservation. +func (in *KubeconfigAttributesObservation) DeepCopy() *KubeconfigAttributesObservation { + if in == nil { + return nil + } + out := new(KubeconfigAttributesObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeconfigAttributesParameters) DeepCopyInto(out *KubeconfigAttributesParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeconfigAttributesParameters. +func (in *KubeconfigAttributesParameters) DeepCopy() *KubeconfigAttributesParameters { + if in == nil { + return nil + } + out := new(KubeconfigAttributesParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetadataInitParameters) DeepCopyInto(out *MetadataInitParameters) { + *out = *in + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetadataInitParameters. +func (in *MetadataInitParameters) DeepCopy() *MetadataInitParameters { + if in == nil { + return nil + } + out := new(MetadataInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetadataObservation) DeepCopyInto(out *MetadataObservation) { + *out = *in + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetadataObservation. +func (in *MetadataObservation) DeepCopy() *MetadataObservation { + if in == nil { + return nil + } + out := new(MetadataObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetadataParameters) DeepCopyInto(out *MetadataParameters) { + *out = *in + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetadataParameters. +func (in *MetadataParameters) DeepCopy() *MetadataParameters { + if in == nil { + return nil + } + out := new(MetadataParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodePool) DeepCopyInto(out *NodePool) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodePool. +func (in *NodePool) DeepCopy() *NodePool { + if in == nil { + return nil + } + out := new(NodePool) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NodePool) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodePoolInitParameters) DeepCopyInto(out *NodePoolInitParameters) { + *out = *in + if in.AntiAffinity != nil { + in, out := &in.AntiAffinity, &out.AntiAffinity + *out = new(bool) + **out = **in + } + if in.Autoscale != nil { + in, out := &in.Autoscale, &out.Autoscale + *out = new(bool) + **out = **in + } + if in.DesiredNodes != nil { + in, out := &in.DesiredNodes, &out.DesiredNodes + *out = new(float64) + **out = **in + } + if in.FlavorName != nil { + in, out := &in.FlavorName, &out.FlavorName + *out = new(string) + **out = **in + } + if in.MaxNodes != nil { + in, out := &in.MaxNodes, &out.MaxNodes + *out = new(float64) + **out = **in + } + if in.MinNodes != nil { + in, out := &in.MinNodes, &out.MinNodes + *out = new(float64) + **out = **in + } + if in.MonthlyBilled != nil { + in, out := &in.MonthlyBilled, &out.MonthlyBilled + *out = new(bool) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = make([]TemplateInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodePoolInitParameters. +func (in *NodePoolInitParameters) DeepCopy() *NodePoolInitParameters { + if in == nil { + return nil + } + out := new(NodePoolInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodePoolList) DeepCopyInto(out *NodePoolList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NodePool, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodePoolList. +func (in *NodePoolList) DeepCopy() *NodePoolList { + if in == nil { + return nil + } + out := new(NodePoolList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NodePoolList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodePoolObservation) DeepCopyInto(out *NodePoolObservation) { + *out = *in + if in.AntiAffinity != nil { + in, out := &in.AntiAffinity, &out.AntiAffinity + *out = new(bool) + **out = **in + } + if in.Autoscale != nil { + in, out := &in.Autoscale, &out.Autoscale + *out = new(bool) + **out = **in + } + if in.AvailableNodes != nil { + in, out := &in.AvailableNodes, &out.AvailableNodes + *out = new(float64) + **out = **in + } + if in.CreatedAt != nil { + in, out := &in.CreatedAt, &out.CreatedAt + *out = new(string) + **out = **in + } + if in.CurrentNodes != nil { + in, out := &in.CurrentNodes, &out.CurrentNodes + *out = new(float64) + **out = **in + } + if in.DesiredNodes != nil { + in, out := &in.DesiredNodes, &out.DesiredNodes + *out = new(float64) + **out = **in + } + if in.Flavor != nil { + in, out := &in.Flavor, &out.Flavor + *out = new(string) + **out = **in + } + if in.FlavorName != nil { + in, out := &in.FlavorName, &out.FlavorName + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.KubeID != nil { + in, out := &in.KubeID, &out.KubeID + *out = new(string) + **out = **in + } + if in.MaxNodes != nil { + in, out := &in.MaxNodes, &out.MaxNodes + *out = new(float64) + **out = **in + } + if in.MinNodes != nil { + in, out := &in.MinNodes, &out.MinNodes + *out = new(float64) + **out = **in + } + if in.MonthlyBilled != nil { + in, out := &in.MonthlyBilled, &out.MonthlyBilled + *out = new(bool) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.SizeStatus != nil { + in, out := &in.SizeStatus, &out.SizeStatus + *out = new(string) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = make([]TemplateObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.UpToDateNodes != nil { + in, out := &in.UpToDateNodes, &out.UpToDateNodes + *out = new(float64) + **out = **in + } + if in.UpdatedAt != nil { + in, out := &in.UpdatedAt, &out.UpdatedAt + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodePoolObservation. +func (in *NodePoolObservation) DeepCopy() *NodePoolObservation { + if in == nil { + return nil + } + out := new(NodePoolObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodePoolParameters) DeepCopyInto(out *NodePoolParameters) { + *out = *in + if in.AntiAffinity != nil { + in, out := &in.AntiAffinity, &out.AntiAffinity + *out = new(bool) + **out = **in + } + if in.Autoscale != nil { + in, out := &in.Autoscale, &out.Autoscale + *out = new(bool) + **out = **in + } + if in.DesiredNodes != nil { + in, out := &in.DesiredNodes, &out.DesiredNodes + *out = new(float64) + **out = **in + } + if in.FlavorName != nil { + in, out := &in.FlavorName, &out.FlavorName + *out = new(string) + **out = **in + } + if in.KubeID != nil { + in, out := &in.KubeID, &out.KubeID + *out = new(string) + **out = **in + } + if in.KubeIDRef != nil { + in, out := &in.KubeIDRef, &out.KubeIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.KubeIDSelector != nil { + in, out := &in.KubeIDSelector, &out.KubeIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.MaxNodes != nil { + in, out := &in.MaxNodes, &out.MaxNodes + *out = new(float64) + **out = **in + } + if in.MinNodes != nil { + in, out := &in.MinNodes, &out.MinNodes + *out = new(float64) + **out = **in + } + if in.MonthlyBilled != nil { + in, out := &in.MonthlyBilled, &out.MonthlyBilled + *out = new(bool) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = make([]TemplateParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodePoolParameters. +func (in *NodePoolParameters) DeepCopy() *NodePoolParameters { + if in == nil { + return nil + } + out := new(NodePoolParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodePoolSpec) DeepCopyInto(out *NodePoolSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodePoolSpec. +func (in *NodePoolSpec) DeepCopy() *NodePoolSpec { + if in == nil { + return nil + } + out := new(NodePoolSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodePoolStatus) DeepCopyInto(out *NodePoolStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodePoolStatus. +func (in *NodePoolStatus) DeepCopy() *NodePoolStatus { + if in == nil { + return nil + } + out := new(NodePoolStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PrivateNetworkConfigurationInitParameters) DeepCopyInto(out *PrivateNetworkConfigurationInitParameters) { + *out = *in + if in.DefaultVrackGateway != nil { + in, out := &in.DefaultVrackGateway, &out.DefaultVrackGateway + *out = new(string) + **out = **in + } + if in.PrivateNetworkRoutingAsDefault != nil { + in, out := &in.PrivateNetworkRoutingAsDefault, &out.PrivateNetworkRoutingAsDefault + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PrivateNetworkConfigurationInitParameters. +func (in *PrivateNetworkConfigurationInitParameters) DeepCopy() *PrivateNetworkConfigurationInitParameters { + if in == nil { + return nil + } + out := new(PrivateNetworkConfigurationInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PrivateNetworkConfigurationObservation) DeepCopyInto(out *PrivateNetworkConfigurationObservation) { + *out = *in + if in.DefaultVrackGateway != nil { + in, out := &in.DefaultVrackGateway, &out.DefaultVrackGateway + *out = new(string) + **out = **in + } + if in.PrivateNetworkRoutingAsDefault != nil { + in, out := &in.PrivateNetworkRoutingAsDefault, &out.PrivateNetworkRoutingAsDefault + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PrivateNetworkConfigurationObservation. +func (in *PrivateNetworkConfigurationObservation) DeepCopy() *PrivateNetworkConfigurationObservation { + if in == nil { + return nil + } + out := new(PrivateNetworkConfigurationObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PrivateNetworkConfigurationParameters) DeepCopyInto(out *PrivateNetworkConfigurationParameters) { + *out = *in + if in.DefaultVrackGateway != nil { + in, out := &in.DefaultVrackGateway, &out.DefaultVrackGateway + *out = new(string) + **out = **in + } + if in.PrivateNetworkRoutingAsDefault != nil { + in, out := &in.PrivateNetworkRoutingAsDefault, &out.PrivateNetworkRoutingAsDefault + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PrivateNetworkConfigurationParameters. +func (in *PrivateNetworkConfigurationParameters) DeepCopy() *PrivateNetworkConfigurationParameters { + if in == nil { + return nil + } + out := new(PrivateNetworkConfigurationParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SpecInitParameters) DeepCopyInto(out *SpecInitParameters) { + *out = *in + if in.Taints != nil { + in, out := &in.Taints, &out.Taints + *out = make([]map[string]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + } + } + if in.Unschedulable != nil { + in, out := &in.Unschedulable, &out.Unschedulable + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SpecInitParameters. +func (in *SpecInitParameters) DeepCopy() *SpecInitParameters { + if in == nil { + return nil + } + out := new(SpecInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SpecObservation) DeepCopyInto(out *SpecObservation) { + *out = *in + if in.Taints != nil { + in, out := &in.Taints, &out.Taints + *out = make([]map[string]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + } + } + if in.Unschedulable != nil { + in, out := &in.Unschedulable, &out.Unschedulable + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SpecObservation. +func (in *SpecObservation) DeepCopy() *SpecObservation { + if in == nil { + return nil + } + out := new(SpecObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SpecParameters) DeepCopyInto(out *SpecParameters) { + *out = *in + if in.Taints != nil { + in, out := &in.Taints, &out.Taints + *out = make([]map[string]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + } + } + if in.Unschedulable != nil { + in, out := &in.Unschedulable, &out.Unschedulable + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SpecParameters. +func (in *SpecParameters) DeepCopy() *SpecParameters { + if in == nil { + return nil + } + out := new(SpecParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateInitParameters) DeepCopyInto(out *TemplateInitParameters) { + *out = *in + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = make([]MetadataInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Spec != nil { + in, out := &in.Spec, &out.Spec + *out = make([]SpecInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateInitParameters. +func (in *TemplateInitParameters) DeepCopy() *TemplateInitParameters { + if in == nil { + return nil + } + out := new(TemplateInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateObservation) DeepCopyInto(out *TemplateObservation) { + *out = *in + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = make([]MetadataObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Spec != nil { + in, out := &in.Spec, &out.Spec + *out = make([]SpecObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateObservation. +func (in *TemplateObservation) DeepCopy() *TemplateObservation { + if in == nil { + return nil + } + out := new(TemplateObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateParameters) DeepCopyInto(out *TemplateParameters) { + *out = *in + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = make([]MetadataParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Spec != nil { + in, out := &in.Spec, &out.Spec + *out = make([]SpecParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateParameters. +func (in *TemplateParameters) DeepCopy() *TemplateParameters { + if in == nil { + return nil + } + out := new(TemplateParameters) + in.DeepCopyInto(out) + return out +} diff --git a/apis/kube/v1alpha1/zz_generated.managed.go b/apis/kube/v1alpha1/zz_generated.managed.go new file mode 100644 index 0000000..b9e0ea8 --- /dev/null +++ b/apis/kube/v1alpha1/zz_generated.managed.go @@ -0,0 +1,188 @@ +/* +Copyright 2022 Upbound Inc. +*/ +// Code generated by angryjet. DO NOT EDIT. + +package v1alpha1 + +import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" + +// GetCondition of this IpRestrictions. +func (mg *IpRestrictions) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this IpRestrictions. +func (mg *IpRestrictions) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this IpRestrictions. +func (mg *IpRestrictions) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this IpRestrictions. +func (mg *IpRestrictions) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this IpRestrictions. +func (mg *IpRestrictions) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this IpRestrictions. +func (mg *IpRestrictions) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this IpRestrictions. +func (mg *IpRestrictions) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this IpRestrictions. +func (mg *IpRestrictions) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this IpRestrictions. +func (mg *IpRestrictions) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this IpRestrictions. +func (mg *IpRestrictions) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this IpRestrictions. +func (mg *IpRestrictions) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this IpRestrictions. +func (mg *IpRestrictions) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} + +// GetCondition of this Kube. +func (mg *Kube) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this Kube. +func (mg *Kube) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this Kube. +func (mg *Kube) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this Kube. +func (mg *Kube) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this Kube. +func (mg *Kube) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this Kube. +func (mg *Kube) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this Kube. +func (mg *Kube) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this Kube. +func (mg *Kube) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this Kube. +func (mg *Kube) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this Kube. +func (mg *Kube) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this Kube. +func (mg *Kube) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this Kube. +func (mg *Kube) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} + +// GetCondition of this NodePool. +func (mg *NodePool) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this NodePool. +func (mg *NodePool) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this NodePool. +func (mg *NodePool) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this NodePool. +func (mg *NodePool) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this NodePool. +func (mg *NodePool) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this NodePool. +func (mg *NodePool) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this NodePool. +func (mg *NodePool) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this NodePool. +func (mg *NodePool) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this NodePool. +func (mg *NodePool) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this NodePool. +func (mg *NodePool) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this NodePool. +func (mg *NodePool) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this NodePool. +func (mg *NodePool) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} diff --git a/apis/kube/v1alpha1/zz_generated.managedlist.go b/apis/kube/v1alpha1/zz_generated.managedlist.go new file mode 100644 index 0000000..34bbc29 --- /dev/null +++ b/apis/kube/v1alpha1/zz_generated.managedlist.go @@ -0,0 +1,35 @@ +/* +Copyright 2022 Upbound Inc. +*/ +// Code generated by angryjet. DO NOT EDIT. + +package v1alpha1 + +import resource "github.com/crossplane/crossplane-runtime/pkg/resource" + +// GetItems of this IpRestrictionsList. +func (l *IpRestrictionsList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} + +// GetItems of this KubeList. +func (l *KubeList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} + +// GetItems of this NodePoolList. +func (l *NodePoolList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} diff --git a/apis/kube/v1alpha1/zz_generated.resolvers.go b/apis/kube/v1alpha1/zz_generated.resolvers.go new file mode 100644 index 0000000..91a4ca8 --- /dev/null +++ b/apis/kube/v1alpha1/zz_generated.resolvers.go @@ -0,0 +1,65 @@ +/* +Copyright 2022 Upbound Inc. +*/ +// Code generated by angryjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + reference "github.com/crossplane/crossplane-runtime/pkg/reference" + errors "github.com/pkg/errors" + client "sigs.k8s.io/controller-runtime/pkg/client" +) + +// ResolveReferences of this IpRestrictions. +func (mg *IpRestrictions) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.KubeID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.KubeIDRef, + Selector: mg.Spec.ForProvider.KubeIDSelector, + To: reference.To{ + List: &KubeList{}, + Managed: &Kube{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.KubeID") + } + mg.Spec.ForProvider.KubeID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.KubeIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this NodePool. +func (mg *NodePool) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.KubeID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.KubeIDRef, + Selector: mg.Spec.ForProvider.KubeIDSelector, + To: reference.To{ + List: &KubeList{}, + Managed: &Kube{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.KubeID") + } + mg.Spec.ForProvider.KubeID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.KubeIDRef = rsp.ResolvedReference + + return nil +} diff --git a/apis/kube/v1alpha1/zz_generated_terraformed.go b/apis/kube/v1alpha1/zz_generated_terraformed.go new file mode 100755 index 0000000..ab1fa77 --- /dev/null +++ b/apis/kube/v1alpha1/zz_generated_terraformed.go @@ -0,0 +1,361 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Kube +func (mg *Kube) GetTerraformResourceType() string { + return "ovh_cloud_project_kube" +} + +// GetConnectionDetailsMapping for this Kube +func (tr *Kube) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"kubeconfig": "status.atProvider.kubeconfig", "kubeconfig_attributes[*]": "status.atProvider.kubeconfigAttributes[*]"} +} + +// GetObservation of this Kube +func (tr *Kube) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Kube +func (tr *Kube) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Kube +func (tr *Kube) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Kube +func (tr *Kube) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Kube +func (tr *Kube) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Kube +func (tr *Kube) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Kube +func (tr *Kube) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Kube using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Kube) LateInitialize(attrs []byte) (bool, error) { + params := &KubeParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *Kube) GetTerraformSchemaVersion() int { + return 0 +} + +// GetTerraformResourceType returns Terraform resource type for this IpRestrictions +func (mg *IpRestrictions) GetTerraformResourceType() string { + return "ovh_cloud_project_kube_iprestrictions" +} + +// GetConnectionDetailsMapping for this IpRestrictions +func (tr *IpRestrictions) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this IpRestrictions +func (tr *IpRestrictions) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this IpRestrictions +func (tr *IpRestrictions) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this IpRestrictions +func (tr *IpRestrictions) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this IpRestrictions +func (tr *IpRestrictions) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this IpRestrictions +func (tr *IpRestrictions) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this IpRestrictions +func (tr *IpRestrictions) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this IpRestrictions +func (tr *IpRestrictions) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this IpRestrictions using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *IpRestrictions) LateInitialize(attrs []byte) (bool, error) { + params := &IpRestrictionsParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *IpRestrictions) GetTerraformSchemaVersion() int { + return 0 +} + +// GetTerraformResourceType returns Terraform resource type for this NodePool +func (mg *NodePool) GetTerraformResourceType() string { + return "ovh_cloud_project_kube_nodepool" +} + +// GetConnectionDetailsMapping for this NodePool +func (tr *NodePool) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this NodePool +func (tr *NodePool) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this NodePool +func (tr *NodePool) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this NodePool +func (tr *NodePool) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this NodePool +func (tr *NodePool) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this NodePool +func (tr *NodePool) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this NodePool +func (tr *NodePool) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this NodePool +func (tr *NodePool) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this NodePool using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *NodePool) LateInitialize(attrs []byte) (bool, error) { + params := &NodePoolParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *NodePool) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/null/v1alpha1/zz_groupversion_info.go b/apis/kube/v1alpha1/zz_groupversion_info.go similarity index 91% rename from apis/null/v1alpha1/zz_groupversion_info.go rename to apis/kube/v1alpha1/zz_groupversion_info.go index 3b570c9..c350cad 100755 --- a/apis/null/v1alpha1/zz_groupversion_info.go +++ b/apis/kube/v1alpha1/zz_groupversion_info.go @@ -9,7 +9,7 @@ Copyright 2022 Upbound Inc. // Code generated by upjet. DO NOT EDIT. // +kubebuilder:object:generate=true -// +groupName=null.template.upbound.io +// +groupName=kube.cloud.ovh.saagie.io // +versionName=v1alpha1 package v1alpha1 @@ -20,7 +20,7 @@ import ( // Package type metadata. const ( - CRDGroup = "null.template.upbound.io" + CRDGroup = "kube.cloud.ovh.saagie.io" CRDVersion = "v1alpha1" ) diff --git a/apis/kube/v1alpha1/zz_iprestrictions_types.go b/apis/kube/v1alpha1/zz_iprestrictions_types.go new file mode 100755 index 0000000..185591f --- /dev/null +++ b/apis/kube/v1alpha1/zz_iprestrictions_types.go @@ -0,0 +1,134 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type IpRestrictionsInitParameters struct { + + // List of CIDR authorized to interact with the managed Kubernetes cluster. + // List of IP restrictions for the cluster + Ips []*string `json:"ips,omitempty" tf:"ips,omitempty"` + + // The id of the public cloud project. If omitted, the OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing this value recreates the resource. + // Service name + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` +} + +type IpRestrictionsObservation struct { + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // List of CIDR authorized to interact with the managed Kubernetes cluster. + // List of IP restrictions for the cluster + Ips []*string `json:"ips,omitempty" tf:"ips,omitempty"` + + // The id of the managed Kubernetes cluster. Changing this value recreates the resource. + // Kube ID + KubeID *string `json:"kubeId,omitempty" tf:"kube_id,omitempty"` + + // The id of the public cloud project. If omitted, the OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing this value recreates the resource. + // Service name + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` +} + +type IpRestrictionsParameters struct { + + // List of CIDR authorized to interact with the managed Kubernetes cluster. + // List of IP restrictions for the cluster + // +kubebuilder:validation:Optional + Ips []*string `json:"ips,omitempty" tf:"ips,omitempty"` + + // The id of the managed Kubernetes cluster. Changing this value recreates the resource. + // Kube ID + // +crossplane:generate:reference:type=github.com/saagie/upjet-provider-ovh/apis/kube/v1alpha1.Kube + // +kubebuilder:validation:Optional + KubeID *string `json:"kubeId,omitempty" tf:"kube_id,omitempty"` + + // Reference to a Kube in kube to populate kubeId. + // +kubebuilder:validation:Optional + KubeIDRef *v1.Reference `json:"kubeIdRef,omitempty" tf:"-"` + + // Selector for a Kube in kube to populate kubeId. + // +kubebuilder:validation:Optional + KubeIDSelector *v1.Selector `json:"kubeIdSelector,omitempty" tf:"-"` + + // The id of the public cloud project. If omitted, the OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing this value recreates the resource. + // Service name + // +kubebuilder:validation:Optional + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` +} + +// IpRestrictionsSpec defines the desired state of IpRestrictions +type IpRestrictionsSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider IpRestrictionsParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider IpRestrictionsInitParameters `json:"initProvider,omitempty"` +} + +// IpRestrictionsStatus defines the observed state of IpRestrictions. +type IpRestrictionsStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider IpRestrictionsObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true + +// IpRestrictions is the Schema for the IpRestrictionss API. +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:subresource:status +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,ovh} +type IpRestrictions struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.ips) || (has(self.initProvider) && has(self.initProvider.ips))",message="spec.forProvider.ips is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.serviceName) || (has(self.initProvider) && has(self.initProvider.serviceName))",message="spec.forProvider.serviceName is a required parameter" + Spec IpRestrictionsSpec `json:"spec"` + Status IpRestrictionsStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// IpRestrictionsList contains a list of IpRestrictionss +type IpRestrictionsList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []IpRestrictions `json:"items"` +} + +// Repository type metadata. +var ( + IpRestrictions_Kind = "IpRestrictions" + IpRestrictions_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: IpRestrictions_Kind}.String() + IpRestrictions_KindAPIVersion = IpRestrictions_Kind + "." + CRDGroupVersion.String() + IpRestrictions_GroupVersionKind = CRDGroupVersion.WithKind(IpRestrictions_Kind) +) + +func init() { + SchemeBuilder.Register(&IpRestrictions{}, &IpRestrictionsList{}) +} diff --git a/apis/kube/v1alpha1/zz_kube_types.go b/apis/kube/v1alpha1/zz_kube_types.go new file mode 100755 index 0000000..250d285 --- /dev/null +++ b/apis/kube/v1alpha1/zz_kube_types.go @@ -0,0 +1,518 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type AdmissionpluginsInitParameters struct { + + // Array of admission plugins disabled, default is [] and only AlwaysPulImages can be disabled at this time. + Disabled []*string `json:"disabled,omitempty" tf:"disabled,omitempty"` + + // Array of admission plugins enabled, default is ["NodeRestriction","AlwaysPulImages"] and only these admission plugins can be enabled at this time. + Enabled []*string `json:"enabled,omitempty" tf:"enabled,omitempty"` +} + +type AdmissionpluginsObservation struct { + + // Array of admission plugins disabled, default is [] and only AlwaysPulImages can be disabled at this time. + Disabled []*string `json:"disabled,omitempty" tf:"disabled,omitempty"` + + // Array of admission plugins enabled, default is ["NodeRestriction","AlwaysPulImages"] and only these admission plugins can be enabled at this time. + Enabled []*string `json:"enabled,omitempty" tf:"enabled,omitempty"` +} + +type AdmissionpluginsParameters struct { + + // Array of admission plugins disabled, default is [] and only AlwaysPulImages can be disabled at this time. + // +kubebuilder:validation:Optional + Disabled []*string `json:"disabled,omitempty" tf:"disabled,omitempty"` + + // Array of admission plugins enabled, default is ["NodeRestriction","AlwaysPulImages"] and only these admission plugins can be enabled at this time. + // +kubebuilder:validation:Optional + Enabled []*string `json:"enabled,omitempty" tf:"enabled,omitempty"` +} + +type ApiserverInitParameters struct { + + // Kubernetes API server admission plugins customization + Admissionplugins []AdmissionpluginsInitParameters `json:"admissionplugins,omitempty" tf:"admissionplugins,omitempty"` +} + +type ApiserverObservation struct { + + // Kubernetes API server admission plugins customization + Admissionplugins []AdmissionpluginsObservation `json:"admissionplugins,omitempty" tf:"admissionplugins,omitempty"` +} + +type ApiserverParameters struct { + + // Kubernetes API server admission plugins customization + // +kubebuilder:validation:Optional + Admissionplugins []AdmissionpluginsParameters `json:"admissionplugins,omitempty" tf:"admissionplugins,omitempty"` +} + +type CustomizationApiserverAdmissionpluginsInitParameters struct { + + // Array of admission plugins disabled, default is [] and only AlwaysPulImages can be disabled at this time. + Disabled []*string `json:"disabled,omitempty" tf:"disabled,omitempty"` + + // Array of admission plugins enabled, default is ["NodeRestriction","AlwaysPulImages"] and only these admission plugins can be enabled at this time. + Enabled []*string `json:"enabled,omitempty" tf:"enabled,omitempty"` +} + +type CustomizationApiserverAdmissionpluginsObservation struct { + + // Array of admission plugins disabled, default is [] and only AlwaysPulImages can be disabled at this time. + Disabled []*string `json:"disabled,omitempty" tf:"disabled,omitempty"` + + // Array of admission plugins enabled, default is ["NodeRestriction","AlwaysPulImages"] and only these admission plugins can be enabled at this time. + Enabled []*string `json:"enabled,omitempty" tf:"enabled,omitempty"` +} + +type CustomizationApiserverAdmissionpluginsParameters struct { + + // Array of admission plugins disabled, default is [] and only AlwaysPulImages can be disabled at this time. + // +kubebuilder:validation:Optional + Disabled []*string `json:"disabled,omitempty" tf:"disabled,omitempty"` + + // Array of admission plugins enabled, default is ["NodeRestriction","AlwaysPulImages"] and only these admission plugins can be enabled at this time. + // +kubebuilder:validation:Optional + Enabled []*string `json:"enabled,omitempty" tf:"enabled,omitempty"` +} + +type CustomizationApiserverInitParameters struct { + + // Kubernetes API server admission plugins customization + Admissionplugins []CustomizationApiserverAdmissionpluginsInitParameters `json:"admissionplugins,omitempty" tf:"admissionplugins,omitempty"` +} + +type CustomizationApiserverObservation struct { + + // Kubernetes API server admission plugins customization + Admissionplugins []CustomizationApiserverAdmissionpluginsObservation `json:"admissionplugins,omitempty" tf:"admissionplugins,omitempty"` +} + +type CustomizationApiserverParameters struct { + + // Kubernetes API server admission plugins customization + // +kubebuilder:validation:Optional + Admissionplugins []CustomizationApiserverAdmissionpluginsParameters `json:"admissionplugins,omitempty" tf:"admissionplugins,omitempty"` +} + +type CustomizationInitParameters struct { + + // Kubernetes API server customization + Apiserver []ApiserverInitParameters `json:"apiserver,omitempty" tf:"apiserver,omitempty"` +} + +type CustomizationKubeProxyInitParameters struct { + + // Kubernetes cluster kube-proxy customization of iptables specific config (durations format is RFC3339 duration, e.g. PT60S) + Iptables []IptablesInitParameters `json:"iptables,omitempty" tf:"iptables,omitempty"` + + // Kubernetes cluster kube-proxy customization of IPVS specific config (durations format is RFC3339 duration, e.g. PT60S) + Ipvs []IpvsInitParameters `json:"ipvs,omitempty" tf:"ipvs,omitempty"` +} + +type CustomizationKubeProxyObservation struct { + + // Kubernetes cluster kube-proxy customization of iptables specific config (durations format is RFC3339 duration, e.g. PT60S) + Iptables []IptablesObservation `json:"iptables,omitempty" tf:"iptables,omitempty"` + + // Kubernetes cluster kube-proxy customization of IPVS specific config (durations format is RFC3339 duration, e.g. PT60S) + Ipvs []IpvsObservation `json:"ipvs,omitempty" tf:"ipvs,omitempty"` +} + +type CustomizationKubeProxyParameters struct { + + // Kubernetes cluster kube-proxy customization of iptables specific config (durations format is RFC3339 duration, e.g. PT60S) + // +kubebuilder:validation:Optional + Iptables []IptablesParameters `json:"iptables,omitempty" tf:"iptables,omitempty"` + + // Kubernetes cluster kube-proxy customization of IPVS specific config (durations format is RFC3339 duration, e.g. PT60S) + // +kubebuilder:validation:Optional + Ipvs []IpvsParameters `json:"ipvs,omitempty" tf:"ipvs,omitempty"` +} + +type CustomizationObservation struct { + + // Kubernetes API server customization + Apiserver []ApiserverObservation `json:"apiserver,omitempty" tf:"apiserver,omitempty"` +} + +type CustomizationParameters struct { + + // Kubernetes API server customization + // +kubebuilder:validation:Optional + Apiserver []ApiserverParameters `json:"apiserver,omitempty" tf:"apiserver,omitempty"` +} + +type IptablesInitParameters struct { + + // Period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). Must be greater than 0. + MinSyncPeriod *string `json:"minSyncPeriod,omitempty" tf:"min_sync_period,omitempty"` + + // Minimum period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). + SyncPeriod *string `json:"syncPeriod,omitempty" tf:"sync_period,omitempty"` +} + +type IptablesObservation struct { + + // Period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). Must be greater than 0. + MinSyncPeriod *string `json:"minSyncPeriod,omitempty" tf:"min_sync_period,omitempty"` + + // Minimum period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). + SyncPeriod *string `json:"syncPeriod,omitempty" tf:"sync_period,omitempty"` +} + +type IptablesParameters struct { + + // Period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). Must be greater than 0. + // +kubebuilder:validation:Optional + MinSyncPeriod *string `json:"minSyncPeriod,omitempty" tf:"min_sync_period,omitempty"` + + // Minimum period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). + // +kubebuilder:validation:Optional + SyncPeriod *string `json:"syncPeriod,omitempty" tf:"sync_period,omitempty"` +} + +type IpvsInitParameters struct { + + // Period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). Must be greater than 0. + MinSyncPeriod *string `json:"minSyncPeriod,omitempty" tf:"min_sync_period,omitempty"` + + // IPVS scheduler. + Scheduler *string `json:"scheduler,omitempty" tf:"scheduler,omitempty"` + + // Minimum period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). + SyncPeriod *string `json:"syncPeriod,omitempty" tf:"sync_period,omitempty"` + + // Timeout value used for IPVS TCP sessions after receiving a FIN in RFC3339 duration (e.g. PT60S). The default value is PT0S, which preserves the current timeout value on the system. + TCPFinTimeout *string `json:"tcpFinTimeout,omitempty" tf:"tcp_fin_timeout,omitempty"` + + // Timeout value used for idle IPVS TCP sessions in RFC3339 duration (e.g. PT60S). The default value is PT0S, which preserves the current timeout value on the system. + TCPTimeout *string `json:"tcpTimeout,omitempty" tf:"tcp_timeout,omitempty"` + + // timeout value used for IPVS UDP packets in RFC3339 duration (e.g. PT60S). The default value is PT0S, which preserves the current timeout value on the system. + UDPTimeout *string `json:"udpTimeout,omitempty" tf:"udp_timeout,omitempty"` +} + +type IpvsObservation struct { + + // Period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). Must be greater than 0. + MinSyncPeriod *string `json:"minSyncPeriod,omitempty" tf:"min_sync_period,omitempty"` + + // IPVS scheduler. + Scheduler *string `json:"scheduler,omitempty" tf:"scheduler,omitempty"` + + // Minimum period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). + SyncPeriod *string `json:"syncPeriod,omitempty" tf:"sync_period,omitempty"` + + // Timeout value used for IPVS TCP sessions after receiving a FIN in RFC3339 duration (e.g. PT60S). The default value is PT0S, which preserves the current timeout value on the system. + TCPFinTimeout *string `json:"tcpFinTimeout,omitempty" tf:"tcp_fin_timeout,omitempty"` + + // Timeout value used for idle IPVS TCP sessions in RFC3339 duration (e.g. PT60S). The default value is PT0S, which preserves the current timeout value on the system. + TCPTimeout *string `json:"tcpTimeout,omitempty" tf:"tcp_timeout,omitempty"` + + // timeout value used for IPVS UDP packets in RFC3339 duration (e.g. PT60S). The default value is PT0S, which preserves the current timeout value on the system. + UDPTimeout *string `json:"udpTimeout,omitempty" tf:"udp_timeout,omitempty"` +} + +type IpvsParameters struct { + + // Period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). Must be greater than 0. + // +kubebuilder:validation:Optional + MinSyncPeriod *string `json:"minSyncPeriod,omitempty" tf:"min_sync_period,omitempty"` + + // IPVS scheduler. + // +kubebuilder:validation:Optional + Scheduler *string `json:"scheduler,omitempty" tf:"scheduler,omitempty"` + + // Minimum period that iptables rules are refreshed, in RFC3339 duration format (e.g. PT60S). + // +kubebuilder:validation:Optional + SyncPeriod *string `json:"syncPeriod,omitempty" tf:"sync_period,omitempty"` + + // Timeout value used for IPVS TCP sessions after receiving a FIN in RFC3339 duration (e.g. PT60S). The default value is PT0S, which preserves the current timeout value on the system. + // +kubebuilder:validation:Optional + TCPFinTimeout *string `json:"tcpFinTimeout,omitempty" tf:"tcp_fin_timeout,omitempty"` + + // Timeout value used for idle IPVS TCP sessions in RFC3339 duration (e.g. PT60S). The default value is PT0S, which preserves the current timeout value on the system. + // +kubebuilder:validation:Optional + TCPTimeout *string `json:"tcpTimeout,omitempty" tf:"tcp_timeout,omitempty"` + + // timeout value used for IPVS UDP packets in RFC3339 duration (e.g. PT60S). The default value is PT0S, which preserves the current timeout value on the system. + // +kubebuilder:validation:Optional + UDPTimeout *string `json:"udpTimeout,omitempty" tf:"udp_timeout,omitempty"` +} + +type KubeInitParameters struct { + + // Deprecated Use customization_apiserver and customization_kube_proxy instead. Kubernetes cluster customization + Customization []CustomizationInitParameters `json:"customization,omitempty" tf:"customization,omitempty"` + + // Kubernetes API server customization + CustomizationApiserver []CustomizationApiserverInitParameters `json:"customizationApiserver,omitempty" tf:"customization_apiserver,omitempty"` + + // Kubernetes kube-proxy customization + CustomizationKubeProxy []CustomizationKubeProxyInitParameters `json:"customizationKubeProxy,omitempty" tf:"customization_kube_proxy,omitempty"` + + // Selected mode for kube-proxy. Changing this value recreates the resource, including ETCD user data. Defaults to iptables. + KubeProxyMode *string `json:"kubeProxyMode,omitempty" tf:"kube_proxy_mode,omitempty"` + + // The name of the kubernetes cluster. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The private network configuration + PrivateNetworkConfiguration []PrivateNetworkConfigurationInitParameters `json:"privateNetworkConfiguration,omitempty" tf:"private_network_configuration,omitempty"` + + // OpenStack private network (or vRack) ID to use. Changing this value recreates the resource, including ETCD user data. Defaults - not use private network. + PrivateNetworkID *string `json:"privateNetworkId,omitempty" tf:"private_network_id,omitempty"` + + // a valid OVHcloud public cloud region ID in which the kubernetes cluster will be available. Ex.: "GRA1". Defaults to all public cloud regions. Changing this value recreates the resource. + Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // The id of the public cloud project. If omitted, the OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing this value recreates the resource. + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // Cluster update policy. Choose between [ALWAYS_UPDATE, MINIMAL_DOWNTIME, NEVER_UPDATE]. + UpdatePolicy *string `json:"updatePolicy,omitempty" tf:"update_policy,omitempty"` + + // kubernetes version to use. Changing this value updates the resource. Defaults to the latest available. + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +type KubeObservation struct { + + // True if control-plane is up-to-date. + ControlPlaneIsUpToDate *bool `json:"controlPlaneIsUpToDate,omitempty" tf:"control_plane_is_up_to_date,omitempty"` + + // Deprecated Use customization_apiserver and customization_kube_proxy instead. Kubernetes cluster customization + Customization []CustomizationObservation `json:"customization,omitempty" tf:"customization,omitempty"` + + // Kubernetes API server customization + CustomizationApiserver []CustomizationApiserverObservation `json:"customizationApiserver,omitempty" tf:"customization_apiserver,omitempty"` + + // Kubernetes kube-proxy customization + CustomizationKubeProxy []CustomizationKubeProxyObservation `json:"customizationKubeProxy,omitempty" tf:"customization_kube_proxy,omitempty"` + + // Managed Kubernetes Service ID + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // True if all nodes and control-plane are up-to-date. + IsUpToDate *bool `json:"isUpToDate,omitempty" tf:"is_up_to_date,omitempty"` + + // Selected mode for kube-proxy. Changing this value recreates the resource, including ETCD user data. Defaults to iptables. + KubeProxyMode *string `json:"kubeProxyMode,omitempty" tf:"kube_proxy_mode,omitempty"` + + // The name of the kubernetes cluster. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Kubernetes versions available for upgrade. + NextUpgradeVersions []*string `json:"nextUpgradeVersions,omitempty" tf:"next_upgrade_versions,omitempty"` + + // Cluster nodes URL. + NodesURL *string `json:"nodesUrl,omitempty" tf:"nodes_url,omitempty"` + + // The private network configuration + PrivateNetworkConfiguration []PrivateNetworkConfigurationObservation `json:"privateNetworkConfiguration,omitempty" tf:"private_network_configuration,omitempty"` + + // OpenStack private network (or vRack) ID to use. Changing this value recreates the resource, including ETCD user data. Defaults - not use private network. + PrivateNetworkID *string `json:"privateNetworkId,omitempty" tf:"private_network_id,omitempty"` + + // a valid OVHcloud public cloud region ID in which the kubernetes cluster will be available. Ex.: "GRA1". Defaults to all public cloud regions. Changing this value recreates the resource. + Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // The id of the public cloud project. If omitted, the OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing this value recreates the resource. + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // Cluster status. Should be normally set to 'READY'. + Status *string `json:"status,omitempty" tf:"status,omitempty"` + + // Management URL of your cluster. + URL *string `json:"url,omitempty" tf:"url,omitempty"` + + // Cluster update policy. Choose between [ALWAYS_UPDATE, MINIMAL_DOWNTIME, NEVER_UPDATE]. + UpdatePolicy *string `json:"updatePolicy,omitempty" tf:"update_policy,omitempty"` + + // kubernetes version to use. Changing this value updates the resource. Defaults to the latest available. + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +type KubeParameters struct { + + // Deprecated Use customization_apiserver and customization_kube_proxy instead. Kubernetes cluster customization + // +kubebuilder:validation:Optional + Customization []CustomizationParameters `json:"customization,omitempty" tf:"customization,omitempty"` + + // Kubernetes API server customization + // +kubebuilder:validation:Optional + CustomizationApiserver []CustomizationApiserverParameters `json:"customizationApiserver,omitempty" tf:"customization_apiserver,omitempty"` + + // Kubernetes kube-proxy customization + // +kubebuilder:validation:Optional + CustomizationKubeProxy []CustomizationKubeProxyParameters `json:"customizationKubeProxy,omitempty" tf:"customization_kube_proxy,omitempty"` + + // Selected mode for kube-proxy. Changing this value recreates the resource, including ETCD user data. Defaults to iptables. + // +kubebuilder:validation:Optional + KubeProxyMode *string `json:"kubeProxyMode,omitempty" tf:"kube_proxy_mode,omitempty"` + + // The name of the kubernetes cluster. + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The private network configuration + // +kubebuilder:validation:Optional + PrivateNetworkConfiguration []PrivateNetworkConfigurationParameters `json:"privateNetworkConfiguration,omitempty" tf:"private_network_configuration,omitempty"` + + // OpenStack private network (or vRack) ID to use. Changing this value recreates the resource, including ETCD user data. Defaults - not use private network. + // +kubebuilder:validation:Optional + PrivateNetworkID *string `json:"privateNetworkId,omitempty" tf:"private_network_id,omitempty"` + + // a valid OVHcloud public cloud region ID in which the kubernetes cluster will be available. Ex.: "GRA1". Defaults to all public cloud regions. Changing this value recreates the resource. + // +kubebuilder:validation:Optional + Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // The id of the public cloud project. If omitted, the OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing this value recreates the resource. + // +kubebuilder:validation:Optional + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // Cluster update policy. Choose between [ALWAYS_UPDATE, MINIMAL_DOWNTIME, NEVER_UPDATE]. + // +kubebuilder:validation:Optional + UpdatePolicy *string `json:"updatePolicy,omitempty" tf:"update_policy,omitempty"` + + // kubernetes version to use. Changing this value updates the resource. Defaults to the latest available. + // +kubebuilder:validation:Optional + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +type KubeconfigAttributesInitParameters struct { +} + +type KubeconfigAttributesObservation struct { + + // The kubernetes API server client certificate. + ClientCertificate *string `json:"clientCertificate,omitempty" tf:"client_certificate,omitempty"` + + // The kubernetes API server client key. + ClientKey *string `json:"clientKey,omitempty" tf:"client_key,omitempty"` + + // The kubernetes API server CA certificate. + ClusterCACertificate *string `json:"clusterCaCertificate,omitempty" tf:"cluster_ca_certificate,omitempty"` + + // The kubernetes API server URL. + Host *string `json:"host,omitempty" tf:"host,omitempty"` +} + +type KubeconfigAttributesParameters struct { +} + +type PrivateNetworkConfigurationInitParameters struct { + + // If defined, all egress traffic will be routed towards this IP address, which should belong to the private network. Empty string means disabled. + // If defined, all egress traffic will be routed towards this IP address, which should belong to the private network. Empty string means disabled. + DefaultVrackGateway *string `json:"defaultVrackGateway,omitempty" tf:"default_vrack_gateway,omitempty"` + + // Defines whether routing should default to using the nodes' private interface, instead of their public interface. Default is false. + // Defines whether routing should default to using the nodes' private interface, instead of their public interface. Default is false. + PrivateNetworkRoutingAsDefault *bool `json:"privateNetworkRoutingAsDefault,omitempty" tf:"private_network_routing_as_default,omitempty"` +} + +type PrivateNetworkConfigurationObservation struct { + + // If defined, all egress traffic will be routed towards this IP address, which should belong to the private network. Empty string means disabled. + // If defined, all egress traffic will be routed towards this IP address, which should belong to the private network. Empty string means disabled. + DefaultVrackGateway *string `json:"defaultVrackGateway,omitempty" tf:"default_vrack_gateway,omitempty"` + + // Defines whether routing should default to using the nodes' private interface, instead of their public interface. Default is false. + // Defines whether routing should default to using the nodes' private interface, instead of their public interface. Default is false. + PrivateNetworkRoutingAsDefault *bool `json:"privateNetworkRoutingAsDefault,omitempty" tf:"private_network_routing_as_default,omitempty"` +} + +type PrivateNetworkConfigurationParameters struct { + + // If defined, all egress traffic will be routed towards this IP address, which should belong to the private network. Empty string means disabled. + // If defined, all egress traffic will be routed towards this IP address, which should belong to the private network. Empty string means disabled. + // +kubebuilder:validation:Optional + DefaultVrackGateway *string `json:"defaultVrackGateway" tf:"default_vrack_gateway,omitempty"` + + // Defines whether routing should default to using the nodes' private interface, instead of their public interface. Default is false. + // Defines whether routing should default to using the nodes' private interface, instead of their public interface. Default is false. + // +kubebuilder:validation:Optional + PrivateNetworkRoutingAsDefault *bool `json:"privateNetworkRoutingAsDefault" tf:"private_network_routing_as_default,omitempty"` +} + +// KubeSpec defines the desired state of Kube +type KubeSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider KubeParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider KubeInitParameters `json:"initProvider,omitempty"` +} + +// KubeStatus defines the observed state of Kube. +type KubeStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider KubeObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true + +// Kube is the Schema for the Kubes API. +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:subresource:status +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,ovh} +type Kube struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.region) || (has(self.initProvider) && has(self.initProvider.region))",message="spec.forProvider.region is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.serviceName) || (has(self.initProvider) && has(self.initProvider.serviceName))",message="spec.forProvider.serviceName is a required parameter" + Spec KubeSpec `json:"spec"` + Status KubeStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// KubeList contains a list of Kubes +type KubeList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Kube `json:"items"` +} + +// Repository type metadata. +var ( + Kube_Kind = "Kube" + Kube_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: Kube_Kind}.String() + Kube_KindAPIVersion = Kube_Kind + "." + CRDGroupVersion.String() + Kube_GroupVersionKind = CRDGroupVersion.WithKind(Kube_Kind) +) + +func init() { + SchemeBuilder.Register(&Kube{}, &KubeList{}) +} diff --git a/apis/kube/v1alpha1/zz_nodepool_types.go b/apis/kube/v1alpha1/zz_nodepool_types.go new file mode 100755 index 0000000..b9084c3 --- /dev/null +++ b/apis/kube/v1alpha1/zz_nodepool_types.go @@ -0,0 +1,393 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type MetadataInitParameters struct { + + // Annotations to apply to each node + // annotations + Annotations map[string]*string `json:"annotations,omitempty" tf:"annotations,omitempty"` + + // Finalizers to apply to each node. A finalizer name must be fully qualified, e.g. kubernetes.io/pv-protection , where you prefix it with hostname of your service which is related to the controller responsible for the finalizer. + // finalizers + Finalizers []*string `json:"finalizers,omitempty" tf:"finalizers,omitempty"` + + // Labels to apply to each node + // labels + Labels map[string]*string `json:"labels,omitempty" tf:"labels,omitempty"` +} + +type MetadataObservation struct { + + // Annotations to apply to each node + // annotations + Annotations map[string]*string `json:"annotations,omitempty" tf:"annotations,omitempty"` + + // Finalizers to apply to each node. A finalizer name must be fully qualified, e.g. kubernetes.io/pv-protection , where you prefix it with hostname of your service which is related to the controller responsible for the finalizer. + // finalizers + Finalizers []*string `json:"finalizers,omitempty" tf:"finalizers,omitempty"` + + // Labels to apply to each node + // labels + Labels map[string]*string `json:"labels,omitempty" tf:"labels,omitempty"` +} + +type MetadataParameters struct { + + // Annotations to apply to each node + // annotations + // +kubebuilder:validation:Optional + Annotations map[string]*string `json:"annotations" tf:"annotations,omitempty"` + + // Finalizers to apply to each node. A finalizer name must be fully qualified, e.g. kubernetes.io/pv-protection , where you prefix it with hostname of your service which is related to the controller responsible for the finalizer. + // finalizers + // +kubebuilder:validation:Optional + Finalizers []*string `json:"finalizers" tf:"finalizers,omitempty"` + + // Labels to apply to each node + // labels + // +kubebuilder:validation:Optional + Labels map[string]*string `json:"labels" tf:"labels,omitempty"` +} + +type NodePoolInitParameters struct { + + // should the pool use the anti-affinity feature. Default to false. Changing this value recreates the resource. + // Enable anti affinity groups for nodes in the pool + AntiAffinity *bool `json:"antiAffinity,omitempty" tf:"anti_affinity,omitempty"` + + // Enable auto-scaling for the pool. Default to false. + // Enable auto-scaling for the pool + Autoscale *bool `json:"autoscale,omitempty" tf:"autoscale,omitempty"` + + // number of nodes to start. + // Number of nodes you desire in the pool + DesiredNodes *float64 `json:"desiredNodes,omitempty" tf:"desired_nodes,omitempty"` + + // a valid OVHcloud public cloud flavor ID in which the nodes will be started. Ex: "b2-7". You can find the list of flavor IDs: https://www.ovhcloud.com/fr/public-cloud/prices/. + // Changing this value recreates the resource. + // Flavor name + FlavorName *string `json:"flavorName,omitempty" tf:"flavor_name,omitempty"` + + // maximum number of nodes allowed in the pool. Setting desired_nodes over this value will raise an error. + // Number of nodes you desire in the pool + MaxNodes *float64 `json:"maxNodes,omitempty" tf:"max_nodes,omitempty"` + + // minimum number of nodes allowed in the pool. Setting desired_nodes under this value will raise an error. + // Number of nodes you desire in the pool + MinNodes *float64 `json:"minNodes,omitempty" tf:"min_nodes,omitempty"` + + // should the nodes be billed on a monthly basis. Default to false. Changing this value recreates the resource. + // Enable monthly billing on all nodes in the pool + MonthlyBilled *bool `json:"monthlyBilled,omitempty" tf:"monthly_billed,omitempty"` + + // The name of the nodepool. Warning: _ char is not allowed! Changing this value recreates the resource. + // NodePool resource name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The id of the public cloud project. If omitted, the OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing this value recreates the resource. + // Service name + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // Node pool template + Template []TemplateInitParameters `json:"template,omitempty" tf:"template,omitempty"` +} + +type NodePoolObservation struct { + + // should the pool use the anti-affinity feature. Default to false. Changing this value recreates the resource. + // Enable anti affinity groups for nodes in the pool + AntiAffinity *bool `json:"antiAffinity,omitempty" tf:"anti_affinity,omitempty"` + + // Enable auto-scaling for the pool. Default to false. + // Enable auto-scaling for the pool + Autoscale *bool `json:"autoscale,omitempty" tf:"autoscale,omitempty"` + + // Number of nodes which are actually ready in the pool + // Number of nodes which are actually ready in the pool + AvailableNodes *float64 `json:"availableNodes,omitempty" tf:"available_nodes,omitempty"` + + // Creation date + // Creation date + CreatedAt *string `json:"createdAt,omitempty" tf:"created_at,omitempty"` + + // Number of nodes present in the pool + // Number of nodes present in the pool + CurrentNodes *float64 `json:"currentNodes,omitempty" tf:"current_nodes,omitempty"` + + // number of nodes to start. + // Number of nodes you desire in the pool + DesiredNodes *float64 `json:"desiredNodes,omitempty" tf:"desired_nodes,omitempty"` + + // Flavor name + // Flavor name + Flavor *string `json:"flavor,omitempty" tf:"flavor,omitempty"` + + // a valid OVHcloud public cloud flavor ID in which the nodes will be started. Ex: "b2-7". You can find the list of flavor IDs: https://www.ovhcloud.com/fr/public-cloud/prices/. + // Changing this value recreates the resource. + // Flavor name + FlavorName *string `json:"flavorName,omitempty" tf:"flavor_name,omitempty"` + + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // The id of the managed kubernetes cluster. Changing this value recreates the resource. + // Kube ID + KubeID *string `json:"kubeId,omitempty" tf:"kube_id,omitempty"` + + // maximum number of nodes allowed in the pool. Setting desired_nodes over this value will raise an error. + // Number of nodes you desire in the pool + MaxNodes *float64 `json:"maxNodes,omitempty" tf:"max_nodes,omitempty"` + + // minimum number of nodes allowed in the pool. Setting desired_nodes under this value will raise an error. + // Number of nodes you desire in the pool + MinNodes *float64 `json:"minNodes,omitempty" tf:"min_nodes,omitempty"` + + // should the nodes be billed on a monthly basis. Default to false. Changing this value recreates the resource. + // Enable monthly billing on all nodes in the pool + MonthlyBilled *bool `json:"monthlyBilled,omitempty" tf:"monthly_billed,omitempty"` + + // The name of the nodepool. Warning: _ char is not allowed! Changing this value recreates the resource. + // NodePool resource name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Project id + // Project id + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // The id of the public cloud project. If omitted, the OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing this value recreates the resource. + // Service name + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // Status describing the state between number of nodes wanted and available ones + // Status describing the state between number of nodes wanted and available ones + SizeStatus *string `json:"sizeStatus,omitempty" tf:"size_status,omitempty"` + + // Current status + // Current status + Status *string `json:"status,omitempty" tf:"status,omitempty"` + + // Node pool template + Template []TemplateObservation `json:"template,omitempty" tf:"template,omitempty"` + + // Number of nodes with the latest version installed in the pool + // Number of nodes with latest version installed in the pool + UpToDateNodes *float64 `json:"upToDateNodes,omitempty" tf:"up_to_date_nodes,omitempty"` + + // Last update date + // Last update date + UpdatedAt *string `json:"updatedAt,omitempty" tf:"updated_at,omitempty"` +} + +type NodePoolParameters struct { + + // should the pool use the anti-affinity feature. Default to false. Changing this value recreates the resource. + // Enable anti affinity groups for nodes in the pool + // +kubebuilder:validation:Optional + AntiAffinity *bool `json:"antiAffinity,omitempty" tf:"anti_affinity,omitempty"` + + // Enable auto-scaling for the pool. Default to false. + // Enable auto-scaling for the pool + // +kubebuilder:validation:Optional + Autoscale *bool `json:"autoscale,omitempty" tf:"autoscale,omitempty"` + + // number of nodes to start. + // Number of nodes you desire in the pool + // +kubebuilder:validation:Optional + DesiredNodes *float64 `json:"desiredNodes,omitempty" tf:"desired_nodes,omitempty"` + + // a valid OVHcloud public cloud flavor ID in which the nodes will be started. Ex: "b2-7". You can find the list of flavor IDs: https://www.ovhcloud.com/fr/public-cloud/prices/. + // Changing this value recreates the resource. + // Flavor name + // +kubebuilder:validation:Optional + FlavorName *string `json:"flavorName,omitempty" tf:"flavor_name,omitempty"` + + // The id of the managed kubernetes cluster. Changing this value recreates the resource. + // Kube ID + // +crossplane:generate:reference:type=github.com/saagie/upjet-provider-ovh/apis/kube/v1alpha1.Kube + // +kubebuilder:validation:Optional + KubeID *string `json:"kubeId,omitempty" tf:"kube_id,omitempty"` + + // Reference to a Kube in kube to populate kubeId. + // +kubebuilder:validation:Optional + KubeIDRef *v1.Reference `json:"kubeIdRef,omitempty" tf:"-"` + + // Selector for a Kube in kube to populate kubeId. + // +kubebuilder:validation:Optional + KubeIDSelector *v1.Selector `json:"kubeIdSelector,omitempty" tf:"-"` + + // maximum number of nodes allowed in the pool. Setting desired_nodes over this value will raise an error. + // Number of nodes you desire in the pool + // +kubebuilder:validation:Optional + MaxNodes *float64 `json:"maxNodes,omitempty" tf:"max_nodes,omitempty"` + + // minimum number of nodes allowed in the pool. Setting desired_nodes under this value will raise an error. + // Number of nodes you desire in the pool + // +kubebuilder:validation:Optional + MinNodes *float64 `json:"minNodes,omitempty" tf:"min_nodes,omitempty"` + + // should the nodes be billed on a monthly basis. Default to false. Changing this value recreates the resource. + // Enable monthly billing on all nodes in the pool + // +kubebuilder:validation:Optional + MonthlyBilled *bool `json:"monthlyBilled,omitempty" tf:"monthly_billed,omitempty"` + + // The name of the nodepool. Warning: _ char is not allowed! Changing this value recreates the resource. + // NodePool resource name + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The id of the public cloud project. If omitted, the OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing this value recreates the resource. + // Service name + // +kubebuilder:validation:Optional + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // Node pool template + // +kubebuilder:validation:Optional + Template []TemplateParameters `json:"template,omitempty" tf:"template,omitempty"` +} + +type SpecInitParameters struct { + + // Taints to apply to each node + // taints + Taints []map[string]*string `json:"taints,omitempty" tf:"taints,omitempty"` + + // If true, set nodes as un-schedulable + // unschedulable + Unschedulable *bool `json:"unschedulable,omitempty" tf:"unschedulable,omitempty"` +} + +type SpecObservation struct { + + // Taints to apply to each node + // taints + Taints []map[string]*string `json:"taints,omitempty" tf:"taints,omitempty"` + + // If true, set nodes as un-schedulable + // unschedulable + Unschedulable *bool `json:"unschedulable,omitempty" tf:"unschedulable,omitempty"` +} + +type SpecParameters struct { + + // Taints to apply to each node + // taints + // +kubebuilder:validation:Optional + Taints []map[string]*string `json:"taints" tf:"taints,omitempty"` + + // If true, set nodes as un-schedulable + // unschedulable + // +kubebuilder:validation:Optional + Unschedulable *bool `json:"unschedulable" tf:"unschedulable,omitempty"` +} + +type TemplateInitParameters struct { + + // Metadata of each node in the pool + // metadata + Metadata []MetadataInitParameters `json:"metadata,omitempty" tf:"metadata,omitempty"` + + // Spec of each node in the pool + // spec + Spec []SpecInitParameters `json:"spec,omitempty" tf:"spec,omitempty"` +} + +type TemplateObservation struct { + + // Metadata of each node in the pool + // metadata + Metadata []MetadataObservation `json:"metadata,omitempty" tf:"metadata,omitempty"` + + // Spec of each node in the pool + // spec + Spec []SpecObservation `json:"spec,omitempty" tf:"spec,omitempty"` +} + +type TemplateParameters struct { + + // Metadata of each node in the pool + // metadata + // +kubebuilder:validation:Optional + Metadata []MetadataParameters `json:"metadata" tf:"metadata,omitempty"` + + // Spec of each node in the pool + // spec + // +kubebuilder:validation:Optional + Spec []SpecParameters `json:"spec" tf:"spec,omitempty"` +} + +// NodePoolSpec defines the desired state of NodePool +type NodePoolSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider NodePoolParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider NodePoolInitParameters `json:"initProvider,omitempty"` +} + +// NodePoolStatus defines the observed state of NodePool. +type NodePoolStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider NodePoolObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true + +// NodePool is the Schema for the NodePools API. +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:subresource:status +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,ovh} +type NodePool struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.flavorName) || (has(self.initProvider) && has(self.initProvider.flavorName))",message="spec.forProvider.flavorName is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.serviceName) || (has(self.initProvider) && has(self.initProvider.serviceName))",message="spec.forProvider.serviceName is a required parameter" + Spec NodePoolSpec `json:"spec"` + Status NodePoolStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// NodePoolList contains a list of NodePools +type NodePoolList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []NodePool `json:"items"` +} + +// Repository type metadata. +var ( + NodePool_Kind = "NodePool" + NodePool_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: NodePool_Kind}.String() + NodePool_KindAPIVersion = NodePool_Kind + "." + CRDGroupVersion.String() + NodePool_GroupVersionKind = CRDGroupVersion.WithKind(NodePool_Kind) +) + +func init() { + SchemeBuilder.Register(&NodePool{}, &NodePoolList{}) +} diff --git a/apis/null/v1alpha1/zz_generated.deepcopy.go b/apis/null/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index 1af19ad..0000000 --- a/apis/null/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,205 +0,0 @@ -//go:build !ignore_autogenerated - -/* -Copyright 2022 Upbound Inc. -*/ - -// Code generated by controller-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Resource) DeepCopyInto(out *Resource) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Resource. -func (in *Resource) DeepCopy() *Resource { - if in == nil { - return nil - } - out := new(Resource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Resource) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceInitParameters) DeepCopyInto(out *ResourceInitParameters) { - *out = *in - if in.Triggers != nil { - in, out := &in.Triggers, &out.Triggers - *out = make(map[string]*string, len(*in)) - for key, val := range *in { - var outVal *string - if val == nil { - (*out)[key] = nil - } else { - inVal := (*in)[key] - in, out := &inVal, &outVal - *out = new(string) - **out = **in - } - (*out)[key] = outVal - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceInitParameters. -func (in *ResourceInitParameters) DeepCopy() *ResourceInitParameters { - if in == nil { - return nil - } - out := new(ResourceInitParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceList) DeepCopyInto(out *ResourceList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Resource, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceList. -func (in *ResourceList) DeepCopy() *ResourceList { - if in == nil { - return nil - } - out := new(ResourceList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ResourceList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceObservation) DeepCopyInto(out *ResourceObservation) { - *out = *in - if in.ID != nil { - in, out := &in.ID, &out.ID - *out = new(string) - **out = **in - } - if in.Triggers != nil { - in, out := &in.Triggers, &out.Triggers - *out = make(map[string]*string, len(*in)) - for key, val := range *in { - var outVal *string - if val == nil { - (*out)[key] = nil - } else { - inVal := (*in)[key] - in, out := &inVal, &outVal - *out = new(string) - **out = **in - } - (*out)[key] = outVal - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceObservation. -func (in *ResourceObservation) DeepCopy() *ResourceObservation { - if in == nil { - return nil - } - out := new(ResourceObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceParameters) DeepCopyInto(out *ResourceParameters) { - *out = *in - if in.Triggers != nil { - in, out := &in.Triggers, &out.Triggers - *out = make(map[string]*string, len(*in)) - for key, val := range *in { - var outVal *string - if val == nil { - (*out)[key] = nil - } else { - inVal := (*in)[key] - in, out := &inVal, &outVal - *out = new(string) - **out = **in - } - (*out)[key] = outVal - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceParameters. -func (in *ResourceParameters) DeepCopy() *ResourceParameters { - if in == nil { - return nil - } - out := new(ResourceParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceSpec) DeepCopyInto(out *ResourceSpec) { - *out = *in - in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) - in.ForProvider.DeepCopyInto(&out.ForProvider) - in.InitProvider.DeepCopyInto(&out.InitProvider) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceSpec. -func (in *ResourceSpec) DeepCopy() *ResourceSpec { - if in == nil { - return nil - } - out := new(ResourceSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceStatus) DeepCopyInto(out *ResourceStatus) { - *out = *in - in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) - in.AtProvider.DeepCopyInto(&out.AtProvider) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceStatus. -func (in *ResourceStatus) DeepCopy() *ResourceStatus { - if in == nil { - return nil - } - out := new(ResourceStatus) - in.DeepCopyInto(out) - return out -} diff --git a/apis/null/v1alpha1/zz_generated.managed.go b/apis/null/v1alpha1/zz_generated.managed.go deleted file mode 100644 index 74df9c5..0000000 --- a/apis/null/v1alpha1/zz_generated.managed.go +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright 2022 Upbound Inc. -*/ -// Code generated by angryjet. DO NOT EDIT. - -package v1alpha1 - -import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" - -// GetCondition of this Resource. -func (mg *Resource) GetCondition(ct xpv1.ConditionType) xpv1.Condition { - return mg.Status.GetCondition(ct) -} - -// GetDeletionPolicy of this Resource. -func (mg *Resource) GetDeletionPolicy() xpv1.DeletionPolicy { - return mg.Spec.DeletionPolicy -} - -// GetManagementPolicies of this Resource. -func (mg *Resource) GetManagementPolicies() xpv1.ManagementPolicies { - return mg.Spec.ManagementPolicies -} - -// GetProviderConfigReference of this Resource. -func (mg *Resource) GetProviderConfigReference() *xpv1.Reference { - return mg.Spec.ProviderConfigReference -} - -// GetPublishConnectionDetailsTo of this Resource. -func (mg *Resource) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { - return mg.Spec.PublishConnectionDetailsTo -} - -// GetWriteConnectionSecretToReference of this Resource. -func (mg *Resource) GetWriteConnectionSecretToReference() *xpv1.SecretReference { - return mg.Spec.WriteConnectionSecretToReference -} - -// SetConditions of this Resource. -func (mg *Resource) SetConditions(c ...xpv1.Condition) { - mg.Status.SetConditions(c...) -} - -// SetDeletionPolicy of this Resource. -func (mg *Resource) SetDeletionPolicy(r xpv1.DeletionPolicy) { - mg.Spec.DeletionPolicy = r -} - -// SetManagementPolicies of this Resource. -func (mg *Resource) SetManagementPolicies(r xpv1.ManagementPolicies) { - mg.Spec.ManagementPolicies = r -} - -// SetProviderConfigReference of this Resource. -func (mg *Resource) SetProviderConfigReference(r *xpv1.Reference) { - mg.Spec.ProviderConfigReference = r -} - -// SetPublishConnectionDetailsTo of this Resource. -func (mg *Resource) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { - mg.Spec.PublishConnectionDetailsTo = r -} - -// SetWriteConnectionSecretToReference of this Resource. -func (mg *Resource) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { - mg.Spec.WriteConnectionSecretToReference = r -} diff --git a/apis/null/v1alpha1/zz_generated_terraformed.go b/apis/null/v1alpha1/zz_generated_terraformed.go deleted file mode 100755 index 3c32037..0000000 --- a/apis/null/v1alpha1/zz_generated_terraformed.go +++ /dev/null @@ -1,102 +0,0 @@ -// SPDX-FileCopyrightText: 2023 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -/* -Copyright 2022 Upbound Inc. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package v1alpha1 - -import ( - "github.com/pkg/errors" - - "github.com/crossplane/upjet/pkg/resource" - "github.com/crossplane/upjet/pkg/resource/json" -) - -// GetTerraformResourceType returns Terraform resource type for this Resource -func (mg *Resource) GetTerraformResourceType() string { - return "null_resource" -} - -// GetConnectionDetailsMapping for this Resource -func (tr *Resource) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this Resource -func (tr *Resource) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Resource -func (tr *Resource) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Resource -func (tr *Resource) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Resource -func (tr *Resource) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Resource -func (tr *Resource) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// GetInitParameters of this Resource -func (tr *Resource) GetInitParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.InitProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// LateInitialize this Resource using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Resource) LateInitialize(attrs []byte) (bool, error) { - params := &ResourceParameters{} - if err := json.TFParser.Unmarshal(attrs, params); err != nil { - return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") - } - opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} - - li := resource.NewGenericLateInitializer(opts...) - return li.LateInitialize(&tr.Spec.ForProvider, params) -} - -// GetTerraformSchemaVersion returns the associated Terraform schema version -func (tr *Resource) GetTerraformSchemaVersion() int { - return 0 -} diff --git a/apis/null/v1alpha1/zz_resource_types.go b/apis/null/v1alpha1/zz_resource_types.go deleted file mode 100755 index 7801a3b..0000000 --- a/apis/null/v1alpha1/zz_resource_types.go +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-FileCopyrightText: 2023 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -/* -Copyright 2022 Upbound Inc. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package v1alpha1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - - v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" -) - -type ResourceInitParameters struct { - - // A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners. - Triggers map[string]*string `json:"triggers,omitempty" tf:"triggers,omitempty"` -} - -type ResourceObservation struct { - ID *string `json:"id,omitempty" tf:"id,omitempty"` - - // A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners. - Triggers map[string]*string `json:"triggers,omitempty" tf:"triggers,omitempty"` -} - -type ResourceParameters struct { - - // A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners. - // +kubebuilder:validation:Optional - Triggers map[string]*string `json:"triggers,omitempty" tf:"triggers,omitempty"` -} - -// ResourceSpec defines the desired state of Resource -type ResourceSpec struct { - v1.ResourceSpec `json:",inline"` - ForProvider ResourceParameters `json:"forProvider"` - // THIS IS A BETA FIELD. It will be honored - // unless the Management Policies feature flag is disabled. - // InitProvider holds the same fields as ForProvider, with the exception - // of Identifier and other resource reference fields. The fields that are - // in InitProvider are merged into ForProvider when the resource is created. - // The same fields are also added to the terraform ignore_changes hook, to - // avoid updating them after creation. This is useful for fields that are - // required on creation, but we do not desire to update them after creation, - // for example because of an external controller is managing them, like an - // autoscaler. - InitProvider ResourceInitParameters `json:"initProvider,omitempty"` -} - -// ResourceStatus defines the observed state of Resource. -type ResourceStatus struct { - v1.ResourceStatus `json:",inline"` - AtProvider ResourceObservation `json:"atProvider,omitempty"` -} - -// +kubebuilder:object:root=true - -// Resource is the Schema for the Resources API. The null_resource resource implements the standard resource lifecycle but takes no further action. The triggers argument allows specifying an arbitrary set of values that, when changed, will cause the resource to be replaced. -// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" -// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" -// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" -// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status -// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,template} -type Resource struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ResourceSpec `json:"spec"` - Status ResourceStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true - -// ResourceList contains a list of Resources -type ResourceList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []Resource `json:"items"` -} - -// Repository type metadata. -var ( - Resource_Kind = "Resource" - Resource_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: Resource_Kind}.String() - Resource_KindAPIVersion = Resource_Kind + "." + CRDGroupVersion.String() - Resource_GroupVersionKind = CRDGroupVersion.WithKind(Resource_Kind) -) - -func init() { - SchemeBuilder.Register(&Resource{}, &ResourceList{}) -} diff --git a/apis/user/v1alpha1/zz_generated.deepcopy.go b/apis/user/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 0000000..8382f5f --- /dev/null +++ b/apis/user/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,760 @@ +//go:build !ignore_autogenerated + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by controller-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "github.com/crossplane/crossplane-runtime/apis/common/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RolesInitParameters) DeepCopyInto(out *RolesInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolesInitParameters. +func (in *RolesInitParameters) DeepCopy() *RolesInitParameters { + if in == nil { + return nil + } + out := new(RolesInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RolesObservation) DeepCopyInto(out *RolesObservation) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Permissions != nil { + in, out := &in.Permissions, &out.Permissions + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolesObservation. +func (in *RolesObservation) DeepCopy() *RolesObservation { + if in == nil { + return nil + } + out := new(RolesObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RolesParameters) DeepCopyInto(out *RolesParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolesParameters. +func (in *RolesParameters) DeepCopy() *RolesParameters { + if in == nil { + return nil + } + out := new(RolesParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3Credentials) DeepCopyInto(out *S3Credentials) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3Credentials. +func (in *S3Credentials) DeepCopy() *S3Credentials { + if in == nil { + return nil + } + out := new(S3Credentials) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *S3Credentials) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3CredentialsInitParameters) DeepCopyInto(out *S3CredentialsInitParameters) { + *out = *in + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3CredentialsInitParameters. +func (in *S3CredentialsInitParameters) DeepCopy() *S3CredentialsInitParameters { + if in == nil { + return nil + } + out := new(S3CredentialsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3CredentialsList) DeepCopyInto(out *S3CredentialsList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]S3Credentials, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3CredentialsList. +func (in *S3CredentialsList) DeepCopy() *S3CredentialsList { + if in == nil { + return nil + } + out := new(S3CredentialsList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *S3CredentialsList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3CredentialsObservation) DeepCopyInto(out *S3CredentialsObservation) { + *out = *in + if in.AccessKeyID != nil { + in, out := &in.AccessKeyID, &out.AccessKeyID + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.InternalUserID != nil { + in, out := &in.InternalUserID, &out.InternalUserID + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.UserID != nil { + in, out := &in.UserID, &out.UserID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3CredentialsObservation. +func (in *S3CredentialsObservation) DeepCopy() *S3CredentialsObservation { + if in == nil { + return nil + } + out := new(S3CredentialsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3CredentialsParameters) DeepCopyInto(out *S3CredentialsParameters) { + *out = *in + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.UserID != nil { + in, out := &in.UserID, &out.UserID + *out = new(string) + **out = **in + } + if in.UserIDRef != nil { + in, out := &in.UserIDRef, &out.UserIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.UserIDSelector != nil { + in, out := &in.UserIDSelector, &out.UserIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3CredentialsParameters. +func (in *S3CredentialsParameters) DeepCopy() *S3CredentialsParameters { + if in == nil { + return nil + } + out := new(S3CredentialsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3CredentialsSpec) DeepCopyInto(out *S3CredentialsSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3CredentialsSpec. +func (in *S3CredentialsSpec) DeepCopy() *S3CredentialsSpec { + if in == nil { + return nil + } + out := new(S3CredentialsSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3CredentialsStatus) DeepCopyInto(out *S3CredentialsStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3CredentialsStatus. +func (in *S3CredentialsStatus) DeepCopy() *S3CredentialsStatus { + if in == nil { + return nil + } + out := new(S3CredentialsStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3Policy) DeepCopyInto(out *S3Policy) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3Policy. +func (in *S3Policy) DeepCopy() *S3Policy { + if in == nil { + return nil + } + out := new(S3Policy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *S3Policy) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3PolicyInitParameters) DeepCopyInto(out *S3PolicyInitParameters) { + *out = *in + if in.Policy != nil { + in, out := &in.Policy, &out.Policy + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3PolicyInitParameters. +func (in *S3PolicyInitParameters) DeepCopy() *S3PolicyInitParameters { + if in == nil { + return nil + } + out := new(S3PolicyInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3PolicyList) DeepCopyInto(out *S3PolicyList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]S3Policy, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3PolicyList. +func (in *S3PolicyList) DeepCopy() *S3PolicyList { + if in == nil { + return nil + } + out := new(S3PolicyList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *S3PolicyList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3PolicyObservation) DeepCopyInto(out *S3PolicyObservation) { + *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.Policy != nil { + in, out := &in.Policy, &out.Policy + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.UserID != nil { + in, out := &in.UserID, &out.UserID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3PolicyObservation. +func (in *S3PolicyObservation) DeepCopy() *S3PolicyObservation { + if in == nil { + return nil + } + out := new(S3PolicyObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3PolicyParameters) DeepCopyInto(out *S3PolicyParameters) { + *out = *in + if in.Policy != nil { + in, out := &in.Policy, &out.Policy + *out = new(string) + **out = **in + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.UserID != nil { + in, out := &in.UserID, &out.UserID + *out = new(string) + **out = **in + } + if in.UserIDRef != nil { + in, out := &in.UserIDRef, &out.UserIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.UserIDSelector != nil { + in, out := &in.UserIDSelector, &out.UserIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3PolicyParameters. +func (in *S3PolicyParameters) DeepCopy() *S3PolicyParameters { + if in == nil { + return nil + } + out := new(S3PolicyParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3PolicySpec) DeepCopyInto(out *S3PolicySpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3PolicySpec. +func (in *S3PolicySpec) DeepCopy() *S3PolicySpec { + if in == nil { + return nil + } + out := new(S3PolicySpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *S3PolicyStatus) DeepCopyInto(out *S3PolicyStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3PolicyStatus. +func (in *S3PolicyStatus) DeepCopy() *S3PolicyStatus { + if in == nil { + return nil + } + out := new(S3PolicyStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *User) DeepCopyInto(out *User) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new User. +func (in *User) DeepCopy() *User { + if in == nil { + return nil + } + out := new(User) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *User) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserInitParameters) DeepCopyInto(out *UserInitParameters) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.OpenstackRc != nil { + in, out := &in.OpenstackRc, &out.OpenstackRc + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.RoleName != nil { + in, out := &in.RoleName, &out.RoleName + *out = new(string) + **out = **in + } + if in.RoleNames != nil { + in, out := &in.RoleNames, &out.RoleNames + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserInitParameters. +func (in *UserInitParameters) DeepCopy() *UserInitParameters { + if in == nil { + return nil + } + out := new(UserInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserList) DeepCopyInto(out *UserList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]User, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserList. +func (in *UserList) DeepCopy() *UserList { + if in == nil { + return nil + } + out := new(UserList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *UserList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserObservation) DeepCopyInto(out *UserObservation) { + *out = *in + if in.CreationDate != nil { + in, out := &in.CreationDate, &out.CreationDate + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.OpenstackRc != nil { + in, out := &in.OpenstackRc, &out.OpenstackRc + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.RoleName != nil { + in, out := &in.RoleName, &out.RoleName + *out = new(string) + **out = **in + } + if in.RoleNames != nil { + in, out := &in.RoleNames, &out.RoleNames + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Roles != nil { + in, out := &in.Roles, &out.Roles + *out = make([]RolesObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } + if in.Username != nil { + in, out := &in.Username, &out.Username + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserObservation. +func (in *UserObservation) DeepCopy() *UserObservation { + if in == nil { + return nil + } + out := new(UserObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserParameters) DeepCopyInto(out *UserParameters) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.OpenstackRc != nil { + in, out := &in.OpenstackRc, &out.OpenstackRc + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.RoleName != nil { + in, out := &in.RoleName, &out.RoleName + *out = new(string) + **out = **in + } + if in.RoleNames != nil { + in, out := &in.RoleNames, &out.RoleNames + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserParameters. +func (in *UserParameters) DeepCopy() *UserParameters { + if in == nil { + return nil + } + out := new(UserParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserSpec) DeepCopyInto(out *UserSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserSpec. +func (in *UserSpec) DeepCopy() *UserSpec { + if in == nil { + return nil + } + out := new(UserSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserStatus) DeepCopyInto(out *UserStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserStatus. +func (in *UserStatus) DeepCopy() *UserStatus { + if in == nil { + return nil + } + out := new(UserStatus) + in.DeepCopyInto(out) + return out +} diff --git a/apis/user/v1alpha1/zz_generated.managed.go b/apis/user/v1alpha1/zz_generated.managed.go new file mode 100644 index 0000000..505db03 --- /dev/null +++ b/apis/user/v1alpha1/zz_generated.managed.go @@ -0,0 +1,188 @@ +/* +Copyright 2022 Upbound Inc. +*/ +// Code generated by angryjet. DO NOT EDIT. + +package v1alpha1 + +import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" + +// GetCondition of this S3Credentials. +func (mg *S3Credentials) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this S3Credentials. +func (mg *S3Credentials) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this S3Credentials. +func (mg *S3Credentials) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this S3Credentials. +func (mg *S3Credentials) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this S3Credentials. +func (mg *S3Credentials) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this S3Credentials. +func (mg *S3Credentials) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this S3Credentials. +func (mg *S3Credentials) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this S3Credentials. +func (mg *S3Credentials) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this S3Credentials. +func (mg *S3Credentials) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this S3Credentials. +func (mg *S3Credentials) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this S3Credentials. +func (mg *S3Credentials) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this S3Credentials. +func (mg *S3Credentials) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} + +// GetCondition of this S3Policy. +func (mg *S3Policy) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this S3Policy. +func (mg *S3Policy) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this S3Policy. +func (mg *S3Policy) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this S3Policy. +func (mg *S3Policy) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this S3Policy. +func (mg *S3Policy) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this S3Policy. +func (mg *S3Policy) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this S3Policy. +func (mg *S3Policy) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this S3Policy. +func (mg *S3Policy) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this S3Policy. +func (mg *S3Policy) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this S3Policy. +func (mg *S3Policy) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this S3Policy. +func (mg *S3Policy) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this S3Policy. +func (mg *S3Policy) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} + +// GetCondition of this User. +func (mg *User) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this User. +func (mg *User) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this User. +func (mg *User) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this User. +func (mg *User) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this User. +func (mg *User) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this User. +func (mg *User) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this User. +func (mg *User) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this User. +func (mg *User) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this User. +func (mg *User) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this User. +func (mg *User) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this User. +func (mg *User) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this User. +func (mg *User) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} diff --git a/apis/user/v1alpha1/zz_generated.managedlist.go b/apis/user/v1alpha1/zz_generated.managedlist.go new file mode 100644 index 0000000..b2a3a84 --- /dev/null +++ b/apis/user/v1alpha1/zz_generated.managedlist.go @@ -0,0 +1,35 @@ +/* +Copyright 2022 Upbound Inc. +*/ +// Code generated by angryjet. DO NOT EDIT. + +package v1alpha1 + +import resource "github.com/crossplane/crossplane-runtime/pkg/resource" + +// GetItems of this S3CredentialsList. +func (l *S3CredentialsList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} + +// GetItems of this S3PolicyList. +func (l *S3PolicyList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} + +// GetItems of this UserList. +func (l *UserList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} diff --git a/apis/user/v1alpha1/zz_generated.resolvers.go b/apis/user/v1alpha1/zz_generated.resolvers.go new file mode 100644 index 0000000..ffefafd --- /dev/null +++ b/apis/user/v1alpha1/zz_generated.resolvers.go @@ -0,0 +1,65 @@ +/* +Copyright 2022 Upbound Inc. +*/ +// Code generated by angryjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + reference "github.com/crossplane/crossplane-runtime/pkg/reference" + errors "github.com/pkg/errors" + client "sigs.k8s.io/controller-runtime/pkg/client" +) + +// ResolveReferences of this S3Credentials. +func (mg *S3Credentials) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.UserID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.UserIDRef, + Selector: mg.Spec.ForProvider.UserIDSelector, + To: reference.To{ + List: &UserList{}, + Managed: &User{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.UserID") + } + mg.Spec.ForProvider.UserID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.UserIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this S3Policy. +func (mg *S3Policy) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.UserID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.UserIDRef, + Selector: mg.Spec.ForProvider.UserIDSelector, + To: reference.To{ + List: &UserList{}, + Managed: &User{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.UserID") + } + mg.Spec.ForProvider.UserID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.UserIDRef = rsp.ResolvedReference + + return nil +} diff --git a/apis/user/v1alpha1/zz_generated_terraformed.go b/apis/user/v1alpha1/zz_generated_terraformed.go new file mode 100755 index 0000000..450d6e5 --- /dev/null +++ b/apis/user/v1alpha1/zz_generated_terraformed.go @@ -0,0 +1,361 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this User +func (mg *User) GetTerraformResourceType() string { + return "ovh_cloud_project_user" +} + +// GetConnectionDetailsMapping for this User +func (tr *User) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"password": "status.atProvider.password"} +} + +// GetObservation of this User +func (tr *User) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this User +func (tr *User) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this User +func (tr *User) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this User +func (tr *User) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this User +func (tr *User) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this User +func (tr *User) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this User +func (tr *User) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this User using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *User) LateInitialize(attrs []byte) (bool, error) { + params := &UserParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *User) GetTerraformSchemaVersion() int { + return 0 +} + +// GetTerraformResourceType returns Terraform resource type for this S3Credentials +func (mg *S3Credentials) GetTerraformResourceType() string { + return "ovh_cloud_project_user_s3_credential" +} + +// GetConnectionDetailsMapping for this S3Credentials +func (tr *S3Credentials) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"secret_access_key": "status.atProvider.secretAccessKey"} +} + +// GetObservation of this S3Credentials +func (tr *S3Credentials) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this S3Credentials +func (tr *S3Credentials) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this S3Credentials +func (tr *S3Credentials) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this S3Credentials +func (tr *S3Credentials) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this S3Credentials +func (tr *S3Credentials) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this S3Credentials +func (tr *S3Credentials) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this S3Credentials +func (tr *S3Credentials) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this S3Credentials using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *S3Credentials) LateInitialize(attrs []byte) (bool, error) { + params := &S3CredentialsParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *S3Credentials) GetTerraformSchemaVersion() int { + return 0 +} + +// GetTerraformResourceType returns Terraform resource type for this S3Policy +func (mg *S3Policy) GetTerraformResourceType() string { + return "ovh_cloud_project_user_s3_policy" +} + +// GetConnectionDetailsMapping for this S3Policy +func (tr *S3Policy) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this S3Policy +func (tr *S3Policy) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this S3Policy +func (tr *S3Policy) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this S3Policy +func (tr *S3Policy) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this S3Policy +func (tr *S3Policy) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this S3Policy +func (tr *S3Policy) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this S3Policy +func (tr *S3Policy) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this S3Policy +func (tr *S3Policy) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this S3Policy using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *S3Policy) LateInitialize(attrs []byte) (bool, error) { + params := &S3PolicyParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *S3Policy) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/user/v1alpha1/zz_groupversion_info.go b/apis/user/v1alpha1/zz_groupversion_info.go new file mode 100755 index 0000000..a6cbd19 --- /dev/null +++ b/apis/user/v1alpha1/zz_groupversion_info.go @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +// +kubebuilder:object:generate=true +// +groupName=user.cloud.ovh.saagie.io +// +versionName=v1alpha1 +package v1alpha1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +// Package type metadata. +const ( + CRDGroup = "user.cloud.ovh.saagie.io" + CRDVersion = "v1alpha1" +) + +var ( + // CRDGroupVersion is the API Group Version used to register the objects + CRDGroupVersion = schema.GroupVersion{Group: CRDGroup, Version: CRDVersion} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme + SchemeBuilder = &scheme.Builder{GroupVersion: CRDGroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + AddToScheme = SchemeBuilder.AddToScheme +) diff --git a/apis/user/v1alpha1/zz_s3credentials_types.go b/apis/user/v1alpha1/zz_s3credentials_types.go new file mode 100755 index 0000000..0f43ff7 --- /dev/null +++ b/apis/user/v1alpha1/zz_s3credentials_types.go @@ -0,0 +1,119 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type S3CredentialsInitParameters struct { + + // Service name of the resource representing the ID of the cloud project. + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` +} + +type S3CredentialsObservation struct { + AccessKeyID *string `json:"accessKeyId,omitempty" tf:"access_key_id,omitempty"` + + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + InternalUserID *string `json:"internalUserId,omitempty" tf:"internal_user_id,omitempty"` + + // Service name of the resource representing the ID of the cloud project. + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // The user ID + UserID *string `json:"userId,omitempty" tf:"user_id,omitempty"` +} + +type S3CredentialsParameters struct { + + // Service name of the resource representing the ID of the cloud project. + // +kubebuilder:validation:Optional + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // The user ID + // +crossplane:generate:reference:type=github.com/saagie/upjet-provider-ovh/apis/user/v1alpha1.User + // +kubebuilder:validation:Optional + UserID *string `json:"userId,omitempty" tf:"user_id,omitempty"` + + // Reference to a User in user to populate userId. + // +kubebuilder:validation:Optional + UserIDRef *v1.Reference `json:"userIdRef,omitempty" tf:"-"` + + // Selector for a User in user to populate userId. + // +kubebuilder:validation:Optional + UserIDSelector *v1.Selector `json:"userIdSelector,omitempty" tf:"-"` +} + +// S3CredentialsSpec defines the desired state of S3Credentials +type S3CredentialsSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider S3CredentialsParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider S3CredentialsInitParameters `json:"initProvider,omitempty"` +} + +// S3CredentialsStatus defines the observed state of S3Credentials. +type S3CredentialsStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider S3CredentialsObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true + +// S3Credentials is the Schema for the S3Credentialss API. +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:subresource:status +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,ovh} +type S3Credentials struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.serviceName) || (has(self.initProvider) && has(self.initProvider.serviceName))",message="spec.forProvider.serviceName is a required parameter" + Spec S3CredentialsSpec `json:"spec"` + Status S3CredentialsStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// S3CredentialsList contains a list of S3Credentialss +type S3CredentialsList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []S3Credentials `json:"items"` +} + +// Repository type metadata. +var ( + S3Credentials_Kind = "S3Credentials" + S3Credentials_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: S3Credentials_Kind}.String() + S3Credentials_KindAPIVersion = S3Credentials_Kind + "." + CRDGroupVersion.String() + S3Credentials_GroupVersionKind = CRDGroupVersion.WithKind(S3Credentials_Kind) +) + +func init() { + SchemeBuilder.Register(&S3Credentials{}, &S3CredentialsList{}) +} diff --git a/apis/user/v1alpha1/zz_s3policy_types.go b/apis/user/v1alpha1/zz_s3policy_types.go new file mode 100755 index 0000000..cb78437 --- /dev/null +++ b/apis/user/v1alpha1/zz_s3policy_types.go @@ -0,0 +1,137 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type S3PolicyInitParameters struct { + + // The policy document. This is a JSON formatted string. See examples of policies on public documentation. + // The policy document. This is a JSON formatted string. + Policy *string `json:"policy,omitempty" tf:"policy,omitempty"` + + // The ID of the public cloud project. If omitted, + // the OVH_CLOUD_PROJECT_SERVICE environment variable is used. + // Service name of the resource representing the ID of the cloud project. + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` +} + +type S3PolicyObservation struct { + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // The policy document. This is a JSON formatted string. See examples of policies on public documentation. + // The policy document. This is a JSON formatted string. + Policy *string `json:"policy,omitempty" tf:"policy,omitempty"` + + // The ID of the public cloud project. If omitted, + // the OVH_CLOUD_PROJECT_SERVICE environment variable is used. + // Service name of the resource representing the ID of the cloud project. + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // The ID of a public cloud project's user. + // The user ID + UserID *string `json:"userId,omitempty" tf:"user_id,omitempty"` +} + +type S3PolicyParameters struct { + + // The policy document. This is a JSON formatted string. See examples of policies on public documentation. + // The policy document. This is a JSON formatted string. + // +kubebuilder:validation:Optional + Policy *string `json:"policy,omitempty" tf:"policy,omitempty"` + + // The ID of the public cloud project. If omitted, + // the OVH_CLOUD_PROJECT_SERVICE environment variable is used. + // Service name of the resource representing the ID of the cloud project. + // +kubebuilder:validation:Optional + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // The ID of a public cloud project's user. + // The user ID + // +crossplane:generate:reference:type=github.com/saagie/upjet-provider-ovh/apis/user/v1alpha1.User + // +kubebuilder:validation:Optional + UserID *string `json:"userId,omitempty" tf:"user_id,omitempty"` + + // Reference to a User in user to populate userId. + // +kubebuilder:validation:Optional + UserIDRef *v1.Reference `json:"userIdRef,omitempty" tf:"-"` + + // Selector for a User in user to populate userId. + // +kubebuilder:validation:Optional + UserIDSelector *v1.Selector `json:"userIdSelector,omitempty" tf:"-"` +} + +// S3PolicySpec defines the desired state of S3Policy +type S3PolicySpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider S3PolicyParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider S3PolicyInitParameters `json:"initProvider,omitempty"` +} + +// S3PolicyStatus defines the observed state of S3Policy. +type S3PolicyStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider S3PolicyObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true + +// S3Policy is the Schema for the S3Policys API. +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:subresource:status +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,ovh} +type S3Policy struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.policy) || (has(self.initProvider) && has(self.initProvider.policy))",message="spec.forProvider.policy is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.serviceName) || (has(self.initProvider) && has(self.initProvider.serviceName))",message="spec.forProvider.serviceName is a required parameter" + Spec S3PolicySpec `json:"spec"` + Status S3PolicyStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// S3PolicyList contains a list of S3Policys +type S3PolicyList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []S3Policy `json:"items"` +} + +// Repository type metadata. +var ( + S3Policy_Kind = "S3Policy" + S3Policy_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: S3Policy_Kind}.String() + S3Policy_KindAPIVersion = S3Policy_Kind + "." + CRDGroupVersion.String() + S3Policy_GroupVersionKind = CRDGroupVersion.WithKind(S3Policy_Kind) +) + +func init() { + SchemeBuilder.Register(&S3Policy{}, &S3PolicyList{}) +} diff --git a/apis/user/v1alpha1/zz_user_types.go b/apis/user/v1alpha1/zz_user_types.go new file mode 100755 index 0000000..361a357 --- /dev/null +++ b/apis/user/v1alpha1/zz_user_types.go @@ -0,0 +1,184 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type RolesInitParameters struct { +} + +type RolesObservation struct { + + // A description associated with the user. + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // id of the role + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // name of the role + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // list of permissions associated with the role + Permissions []*string `json:"permissions,omitempty" tf:"permissions,omitempty"` +} + +type RolesParameters struct { +} + +type UserInitParameters struct { + + // A description associated with the user. + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // a convenient map representing an openstack_rc file. + // Note: no password nor sensitive token is set in this map. + OpenstackRc map[string]*string `json:"openstackRc,omitempty" tf:"openstack_rc,omitempty"` + + // The name of a role. See role_names. + RoleName *string `json:"roleName,omitempty" tf:"role_name,omitempty"` + + // A list of role names. Values can be: + RoleNames []*string `json:"roleNames,omitempty" tf:"role_names,omitempty"` + + // The id of the public cloud project. If omitted, + // the OVH_CLOUD_PROJECT_SERVICE environment variable is used. + // Service name of the resource representing the id of the cloud project. + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` +} + +type UserObservation struct { + + // the date the user was created. + CreationDate *string `json:"creationDate,omitempty" tf:"creation_date,omitempty"` + + // A description associated with the user. + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // id of the role + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // a convenient map representing an openstack_rc file. + // Note: no password nor sensitive token is set in this map. + OpenstackRc map[string]*string `json:"openstackRc,omitempty" tf:"openstack_rc,omitempty"` + + // The name of a role. See role_names. + RoleName *string `json:"roleName,omitempty" tf:"role_name,omitempty"` + + // A list of role names. Values can be: + RoleNames []*string `json:"roleNames,omitempty" tf:"role_names,omitempty"` + + // A list of roles associated with the user. + Roles []RolesObservation `json:"roles,omitempty" tf:"roles,omitempty"` + + // The id of the public cloud project. If omitted, + // the OVH_CLOUD_PROJECT_SERVICE environment variable is used. + // Service name of the resource representing the id of the cloud project. + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` + + // the status of the user. should be normally set to 'ok'. + Status *string `json:"status,omitempty" tf:"status,omitempty"` + + // the username generated for the user. This username can be used with + // the Openstack API. + Username *string `json:"username,omitempty" tf:"username,omitempty"` +} + +type UserParameters struct { + + // A description associated with the user. + // +kubebuilder:validation:Optional + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // a convenient map representing an openstack_rc file. + // Note: no password nor sensitive token is set in this map. + // +kubebuilder:validation:Optional + OpenstackRc map[string]*string `json:"openstackRc,omitempty" tf:"openstack_rc,omitempty"` + + // The name of a role. See role_names. + // +kubebuilder:validation:Optional + RoleName *string `json:"roleName,omitempty" tf:"role_name,omitempty"` + + // A list of role names. Values can be: + // +kubebuilder:validation:Optional + RoleNames []*string `json:"roleNames,omitempty" tf:"role_names,omitempty"` + + // The id of the public cloud project. If omitted, + // the OVH_CLOUD_PROJECT_SERVICE environment variable is used. + // Service name of the resource representing the id of the cloud project. + // +kubebuilder:validation:Optional + ServiceName *string `json:"serviceName,omitempty" tf:"service_name,omitempty"` +} + +// UserSpec defines the desired state of User +type UserSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider UserParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider UserInitParameters `json:"initProvider,omitempty"` +} + +// UserStatus defines the observed state of User. +type UserStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider UserObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true + +// User is the Schema for the Users API. +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:subresource:status +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,ovh} +type User struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.serviceName) || (has(self.initProvider) && has(self.initProvider.serviceName))",message="spec.forProvider.serviceName is a required parameter" + Spec UserSpec `json:"spec"` + Status UserStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// UserList contains a list of Users +type UserList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []User `json:"items"` +} + +// Repository type metadata. +var ( + User_Kind = "User" + User_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: User_Kind}.String() + User_KindAPIVersion = User_Kind + "." + CRDGroupVersion.String() + User_GroupVersionKind = CRDGroupVersion.WithKind(User_Kind) +) + +func init() { + SchemeBuilder.Register(&User{}, &UserList{}) +} diff --git a/apis/v1alpha1/doc.go b/apis/v1alpha1/doc.go index 468ffa7..4fe8dab 100644 --- a/apis/v1alpha1/doc.go +++ b/apis/v1alpha1/doc.go @@ -2,8 +2,8 @@ Copyright 2021 Upbound Inc. */ -// Package v1alpha1 contains the core resources of the template jet provider. +// Package v1alpha1 contains the core resources of the ovh jet provider. // +kubebuilder:object:generate=true -// +groupName=template.upbound.io +// +groupName=ovh.saagie.io // +versionName=v1alpha1 package v1alpha1 diff --git a/apis/v1alpha1/register.go b/apis/v1alpha1/register.go index 038d8b3..89e2d51 100644 --- a/apis/v1alpha1/register.go +++ b/apis/v1alpha1/register.go @@ -13,7 +13,7 @@ import ( // Package type metadata. const ( - Group = "template.upbound.io" + Group = "ovh.saagie.io" Version = "v1alpha1" ) diff --git a/apis/v1beta1/doc.go b/apis/v1beta1/doc.go index 71a80b6..e0590ca 100644 --- a/apis/v1beta1/doc.go +++ b/apis/v1beta1/doc.go @@ -2,8 +2,8 @@ Copyright 2022 Upbound Inc. */ -// Package v1beta1 contains the core resources of the template upjet provider. +// Package v1beta1 contains the core resources of the ovh upjet provider. // +kubebuilder:object:generate=true -// +groupName=template.upbound.io +// +groupName=ovh.saagie.io // +versionName=v1beta1 package v1beta1 diff --git a/apis/v1beta1/register.go b/apis/v1beta1/register.go index a99c36e..21598d9 100644 --- a/apis/v1beta1/register.go +++ b/apis/v1beta1/register.go @@ -13,7 +13,7 @@ import ( // Package type metadata. const ( - Group = "template.upbound.io" + Group = "ovh.saagie.io" Version = "v1beta1" ) diff --git a/apis/v1beta1/types.go b/apis/v1beta1/types.go index 110474a..19fc3af 100644 --- a/apis/v1beta1/types.go +++ b/apis/v1beta1/types.go @@ -32,12 +32,12 @@ type ProviderConfigStatus struct { // +kubebuilder:object:root=true -// A ProviderConfig configures a Template provider. +// A ProviderConfig configures a Ovh provider. // +kubebuilder:subresource:status // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" // +kubebuilder:printcolumn:name="SECRET-NAME",type="string",JSONPath=".spec.credentials.secretRef.name",priority=1 // +kubebuilder:resource:scope=Cluster -// +kubebuilder:resource:scope=Cluster,categories={crossplane,provider,template} +// +kubebuilder:resource:scope=Cluster,categories={crossplane,provider,ovh} type ProviderConfig struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` @@ -62,7 +62,7 @@ type ProviderConfigList struct { // +kubebuilder:printcolumn:name="CONFIG-NAME",type="string",JSONPath=".providerConfigRef.name" // +kubebuilder:printcolumn:name="RESOURCE-KIND",type="string",JSONPath=".resourceRef.kind" // +kubebuilder:printcolumn:name="RESOURCE-NAME",type="string",JSONPath=".resourceRef.name" -// +kubebuilder:resource:scope=Cluster,categories={crossplane,provider,template} +// +kubebuilder:resource:scope=Cluster,categories={crossplane,provider,ovh} type ProviderConfigUsage struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/apis/zz_register.go b/apis/zz_register.go index 9a6d212..759d156 100755 --- a/apis/zz_register.go +++ b/apis/zz_register.go @@ -14,15 +14,19 @@ package apis import ( "k8s.io/apimachinery/pkg/runtime" - v1alpha1 "github.com/upbound/upjet-provider-template/apis/null/v1alpha1" - v1alpha1apis "github.com/upbound/upjet-provider-template/apis/v1alpha1" - v1beta1 "github.com/upbound/upjet-provider-template/apis/v1beta1" + v1alpha1 "github.com/saagie/upjet-provider-ovh/apis/database/v1alpha1" + v1alpha1kube "github.com/saagie/upjet-provider-ovh/apis/kube/v1alpha1" + v1alpha1user "github.com/saagie/upjet-provider-ovh/apis/user/v1alpha1" + v1alpha1apis "github.com/saagie/upjet-provider-ovh/apis/v1alpha1" + v1beta1 "github.com/saagie/upjet-provider-ovh/apis/v1beta1" ) func init() { // Register the types with the Scheme so the components can map objects to GroupVersionKinds and back AddToSchemes = append(AddToSchemes, v1alpha1.SchemeBuilder.AddToScheme, + v1alpha1kube.SchemeBuilder.AddToScheme, + v1alpha1user.SchemeBuilder.AddToScheme, v1alpha1apis.SchemeBuilder.AddToScheme, v1beta1.SchemeBuilder.AddToScheme, ) diff --git a/cluster/images/upjet-provider-template/Dockerfile b/cluster/images/upjet-provider-ovh/Dockerfile similarity index 100% rename from cluster/images/upjet-provider-template/Dockerfile rename to cluster/images/upjet-provider-ovh/Dockerfile diff --git a/cluster/images/upjet-provider-template/Makefile b/cluster/images/upjet-provider-ovh/Makefile similarity index 100% rename from cluster/images/upjet-provider-template/Makefile rename to cluster/images/upjet-provider-ovh/Makefile diff --git a/cluster/images/upjet-provider-template/terraformrc.hcl b/cluster/images/upjet-provider-ovh/terraformrc.hcl similarity index 100% rename from cluster/images/upjet-provider-template/terraformrc.hcl rename to cluster/images/upjet-provider-ovh/terraformrc.hcl diff --git a/cluster/test/setup.sh b/cluster/test/setup.sh index f1138cc..8a6c23d 100755 --- a/cluster/test/setup.sh +++ b/cluster/test/setup.sh @@ -13,7 +13,7 @@ ${KUBECTL} -n upbound-system wait --for=condition=Available deployment --all --t echo "Creating a default provider config..." cat <= to 60.' + zone: '- (Required) The domain to add the record to' + importStatements: [] + ovh_domain_zone_redirection: + subCategory: "" + name: ovh_domain_zone_redirection + title: "" + examples: + - name: test + manifest: |- + { + "subdomain": "test", + "target": "http://www.ovh", + "type": "visiblePermanent", + "zone": "testdemo.ovh" + } + argumentDocs: + description: '- (Optional) A description of this redirection' + id: '- The redirection ID' + invisible: -> Redirection by html frame + keywords: '- (Optional) Keywords to describe this redirection' + subDomain: '- The name of the redirection' + subdomain: '- (Optional) The name of the redirection' + target: '- (Required) The value of the redirection' + title: '- (Optional) Title of this redirection' + type: '- (Required) The type of the redirection, with values:' + visible: -> Redirection by http code 302 + visiblePermanent: -> Redirection by http code 301 + zone: '- (Required) The domain to add the redirection to' + importStatements: [] + ovh_hosting_privatedatabase: + subCategory: "" + name: ovh_hosting_privatedatabase + title: "" + examples: + - name: database + manifest: |- + { + "display_name": "Postgresql-12", + "ovh_subsidiary": "${data.ovh_order_cart.mycart.ovh_subsidiary}", + "plan": [ + { + "configuration": [ + { + "label": "dc", + "value": "gra3" + }, + { + "label": "engine", + "value": "postgresql_12" + } + ], + "duration": "${data.ovh_order_cart_product_plan.database.prices[3].duration}", + "plan_code": "${data.ovh_order_cart_product_plan.database.plan_code}", + "pricing_mode": "${data.ovh_order_cart_product_plan.database.selected_price[0].pricing_mode}" + } + ] + } + references: + ovh_subsidiary: data.ovh_order_cart.mycart.ovh_subsidiary + plan.duration: data.ovh_order_cart_product_plan.database.prices[3].duration + plan.plan_code: data.ovh_order_cart_product_plan.database.plan_code + plan.pricing_mode: data.ovh_order_cart_product_plan.database.selected_price[0].pricing_mode + argumentDocs: + catalog_name: '- Catalog name' + configuration: '- (Optional) Representation of a configuration item for personalizing product' + cpu: '- Number of CPU on your private database' + datacenter: '- Datacenter where this private database is located' + date: '- date' + description: '- Custom description on your privatedatabase order.' + details: '- Information about a Bill entry' + display_name: '- Name displayed in customer panel for your private database' + domain: '- expiration date' + duration: '- (Required) duration.' + expiration_date: '- expiration date' + hostname: '- Private database hostname' + hostname_ftp: '- Private database FTP hostname' + id: '- Private database id' + infrastructure: '- Infrastructure where service was stored' + label: '- (Required) Identifier of the resource' + offer: '- Type of the private database offer' + order: '- Details about your Order' + order_detail_id: '- order detail id' + order_id: '- order id' + ovh_subsidiary: '- (Required) OVHcloud Subsidiary. Country of OVHcloud legal entity you''ll be billed by. List of supported subsidiaries available on API at /1.0/me.json under' + plan: '- (Required) Product Plan to order' + plan_code: '- (Required) Plan code.' + plan_option: ': Product Plan to order' + port: ': Private database service port' + port_ftp: ': Private database FTP port' + pricing_mode: '- (Required) Pricing model identifier' + quantity: '- quantity' + quota_size: ': Space allowed (in MB) on your private database' + quota_used: ': Sapce used (in MB) on your private database' + ram: ': Amount of ram (in MB) on your private database' + server: ': Private database server name' + service_name: ': Service name' + state: ': Private database state' + type: ': Private database type' + urn: '- URN of the private database, used when writing IAM policies' + value: '- (Required) Path to the resource in API.OVH.COM' + version: ': Private database available versions' + version_label: ': Private database version label' + version_number: ': Private database version number' + importStatements: [] + ovh_hosting_privatedatabase_database: + subCategory: "" + name: ovh_hosting_privatedatabase_database + title: "" + examples: + - name: database + manifest: |- + { + "database_name": "XXXXXX", + "service_name": "XXXXXX" + } + argumentDocs: + database_name: '- (Required) Name of your new database' + service_name: '- The internal name of your private database.' + importStatements: [] + ovh_hosting_privatedatabase_user: + subCategory: "" + name: ovh_hosting_privatedatabase_user + title: "" + examples: + - name: user + manifest: |- + { + "password": "XXXXXX", + "service_name": "XXXXXX", + "user_name": "XXXXXX" + } + argumentDocs: + password: '- (Required) Password for the new user (alphanumeric, minimum one number and 8 characters minimum)' + service_name: '- The internal name of your private database.' + user_name: '- (Required) User name used to connect on your databases' + importStatements: [] + ovh_hosting_privatedatabase_user_grant: + subCategory: "" + name: ovh_hosting_privatedatabase_user_grant + title: "" + examples: + - name: user_grant + manifest: |- + { + "database_name": "ovhcloud", + "grant": "admin", + "service_name": "XXXXXX", + "user_name": "terraform" + } + argumentDocs: + database_name: '- (Required) Database name where add grant.' + grant: '- (Required) Database name where add grant. Values can be:' + service_name: '- The internal name of your private database.' + user_name: '- (Required) User name used to connect on your databases.' + importStatements: [] + ovh_hosting_privatedatabase_whitelist: + subCategory: "" + name: ovh_hosting_privatedatabase_whitelist + title: "" + examples: + - name: ip + manifest: |- + { + "ip": "1.2.3.4", + "name": "A name for your IP address", + "service": true, + "service_name": "XXXXXX", + "sftp": true + } + argumentDocs: + ip: '- (Required) The whitelisted IP in your instance.' + name: '- (Required) Custom name for your Whitelisted IP.' + service: '- (Required) Authorize this IP to access service port. Values can be true or false' + service_name: '- The internal name of your private database.' + sftp: '- (Required) Authorize this IP to access SFTP port. Values can be true or false' + importStatements: [] + ovh_iam_policy: + subCategory: "" + name: ovh_iam_policy + title: "" + examples: + - name: manager + manifest: |- + { + "allow": [ + "account:apiovh:me/get", + "account:apiovh:me/supportLevel/get", + "account:apiovh:me/certificates/get", + "account:apiovh:me/tag/get", + "account:apiovh:services/get", + "account:apiovh:*" + ], + "description": "Users are allowed to use the OVH manager", + "identities": [ + "${ovh_me_identity_group.my_group.urn}" + ], + "name": "allow_ovh_manager", + "resources": [ + "${data.ovh_me.account.urn}" + ] + } + dependencies: + ovh_me_identity_group.my_group: |- + { + "description": "my_group created in Terraform", + "name": "my_group" + } + argumentDocs: + allow: '- List of actions allowed on resources by identities' + created_at: '- Creation date of this group.' + description: '- Description of the policy' + except: '- List of overrides of action that must not be allowed even if they are caught by allow. Only makes sens if allow contains wildcards.' + identities: '- List of identities affected by the policy' + name: '- Name of the policy, must be unique' + owner: '- Owner of the policy.' + read_only: '- Indicates that the policy is a default one.' + resources: '- List of resources affected by the policy' + updated_at: '- Date of the last update of this group.' + importStatements: [] + ovh_ip_reverse: + subCategory: "" + name: ovh_ip_reverse + title: "" + examples: + - name: test + manifest: |- + { + "ip": "192.0.2.0/24", + "ip_reverse": "192.0.2.1", + "reverse": "example.com" + } + argumentDocs: + ip: '- (Required) The IP block to which the IP belongs' + ip_reverse: '- (Required) The IP to set the reverse of' + reverse: '- (Required) The value of the reverse' + importStatements: [] + ovh_ip_service: + subCategory: "" + name: ovh_ip_service + title: "" + examples: + - name: ipblock + manifest: |- + { + "description": "${data.ovh_order_cart.mycart.description}", + "ovh_subsidiary": "${data.ovh_order_cart.mycart.ovh_subsidiary}", + "plan": [ + { + "configuration": [ + { + "label": "country", + "value": "FR" + } + ], + "duration": "${data.ovh_order_cart_product_plan.ipblock.selected_price.0.duration}", + "plan_code": "${data.ovh_order_cart_product_plan.ipblock.plan_code}", + "pricing_mode": "${data.ovh_order_cart_product_plan.ipblock.selected_price.0.pricing_mode}" + } + ] + } + references: + description: data.ovh_order_cart.mycart.description + ovh_subsidiary: data.ovh_order_cart.mycart.ovh_subsidiary + plan.duration: data.ovh_order_cart_product_plan.ipblock.selected_price.0.duration + plan.plan_code: data.ovh_order_cart_product_plan.ipblock.plan_code + plan.pricing_mode: data.ovh_order_cart_product_plan.ipblock.selected_price.0.pricing_mode + dependencies: + ovh_vrack.vrack: |- + { + "description": "${data.ovh_order_cart.mycart.description}", + "name": "${data.ovh_order_cart.mycart.description}", + "ovh_subsidiary": "${data.ovh_order_cart.mycart.ovh_subsidiary}", + "plan": [ + { + "duration": "${data.ovh_order_cart_product_plan.vrack.selected_price.0.duration}", + "plan_code": "${data.ovh_order_cart_product_plan.vrack.plan_code}", + "pricing_mode": "${data.ovh_order_cart_product_plan.vrack.selected_price.0.pricing_mode}" + } + ] + } + ovh_vrack_ip.vrackblock: |- + { + "block": "${ovh_ip_service.ipblock.ip}", + "service_name": "${ovh_vrack.vrack.service_name}" + } + argumentDocs: + block: '- (Required) Your IP block.' + gateway: '- Your gateway' + ip: '- Your IP block' + service_name: '- (Required) The internal name of your vrack' + zone: '- Where you want your block announced on the network' + importStatements: [] + ovh_iploadbalancing: + subCategory: "" + name: ovh_iploadbalancing + title: "" examples: - - name: cluster + - name: iplb-lb1 manifest: |- { - "connection": [ + "display_name": "my ip loadbalancing", + "ovh_subsidiary": "${data.ovh_order_cart.mycart.ovh_subsidiary}", + "plan": [ { - "host": "${element(aws_instance.cluster.*.public_ip, 0)}" + "duration": "${data.ovh_order_cart_product_plan.iplb.selected_price.0.duration}", + "plan_code": "${data.ovh_order_cart_product_plan.iplb.plan_code}", + "pricing_mode": "${data.ovh_order_cart_product_plan.iplb.selected_price.0.pricing_mode}" } ], - "provisioner": { - "remote-exec": [ - { - "inline": [ - "bootstrap-cluster.sh ${join(\" \", aws_instance.cluster.*.private_ip)}" - ] - } - ] - }, - "triggers": { - "cluster_instance_ids": "${join(\",\", aws_instance.cluster.*.id)}" - } + "plan_option": [ + { + "duration": "${data.ovh_order_cart_product_options_plan.bhs.selected_price.0.duration}", + "plan_code": "${data.ovh_order_cart_product_options_plan.bhs.plan_code}", + "pricing_mode": "${data.ovh_order_cart_product_options_plan.bhs.selected_price.0.pricing_mode}" + } + ] + } + references: + ovh_subsidiary: data.ovh_order_cart.mycart.ovh_subsidiary + plan.duration: data.ovh_order_cart_product_plan.iplb.selected_price.0.duration + plan.plan_code: data.ovh_order_cart_product_plan.iplb.plan_code + plan.pricing_mode: data.ovh_order_cart_product_plan.iplb.selected_price.0.pricing_mode + plan_option.duration: data.ovh_order_cart_product_options_plan.bhs.selected_price.0.duration + plan_option.plan_code: data.ovh_order_cart_product_options_plan.bhs.plan_code + plan_option.pricing_mode: data.ovh_order_cart_product_options_plan.bhs.selected_price.0.pricing_mode + argumentDocs: + catalog_name: '- Catalog name' + configuration: '- (Optional) Representation of a configuration item for personalizing product' + date: '- date' + description: '- description' + details: '- Information about a Bill entry' + display_name: '- Set the name displayed in ManagerV6 for your iplb (max 50 chars)' + domain: '- expiration date' + duration: '- (Required) duration' + expiration_date: '- expiration date' + ip_loadbalancing: '- Your IP load balancing' + ipv4: '- The IPV4 associated to your IP load balancing' + ipv6: '- The IPV6 associated to your IP load balancing. DEPRECATED.' + label: '- (Required) Identifier of the resource' + metrics_token: '- The metrics token associated with your IP load balancing' + name: '- The zone three letter code' + offer: '- The offer of your IP load balancing' + order: '- Details about an Order' + order_detail_id: '- order detail id' + order_id: '- order id' + orderable_zone: '- Available additional zone for your Load Balancer' + ovh_subsidiary: '- (Required) OVHcloud Subsidiary. Country of OVHcloud legal entity you''ll be billed by. List of supported subsidiaries available on API at /1.0/me.json under' + plan: '- (Required) Product Plan to order' + plan_code: '- (Required) Plan code' + plan_option: '- (Optional) Product Plan to order' + pricing_mode: '- (Required) Pricing model identifier' + quantity: '- quantity' + service_name: '- The internal name of your IP load balancing' + ssl_configuration: '- Modern oldest compatible clients : Firefox 27, Chrome 30, IE 11 on Windows 7, Edge, Opera 17, Safari 9, Android 5.0, and Java 8. Intermediate oldest compatible clients : Firefox 1, Chrome 1, IE 7, Opera 5, Safari 1, Windows XP IE8, Android 2.3, Java 7. Intermediate if null. one of "intermediate", "modern".' + state: '- Current state of your IP' + urn: '- URN of the load balancer, used when writing IAM policies' + value: '- (Required) Path to the resource in API.OVH.COM' + vrack_eligibility: '- Vrack eligibility' + vrack_name: '- Name of the vRack on which the current Load Balancer is attached to, as it is named on vRack product' + zone: '- Location where your service is' + importStatements: [] + ovh_iploadbalancing_http_farm: + subCategory: "" + name: ovh_iploadbalancing_http_farm + title: "" + examples: + - name: farmname + manifest: |- + { + "display_name": "ingress-8080-gra", + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "zone": "GRA" + } + argumentDocs: + balance: '- Load balancing algorithm. roundrobin if null (first, leastconn, roundrobin, source)' + display_name: '- Readable label for loadbalancer farm' + force_ssl: '- Force use of SSL (TLS)' + interval: '- probe interval, Value between 30 and 3600 seconds, default 30' + match: '- What to match pattern against (contains, default, internal, matches, status)' + method: '- HTTP probe method (GET, HEAD, OPTIONS, internal)' + negate: '- Negate probe result' + pattern: '- Pattern to match against match' + port: '- Port attached to your farm ([1..49151]). Inherited from frontend if null' + probe: '- define a backend healthcheck probe' + service_name: '- (Required) The internal name of your IP load balancing' + stickiness: "- \tStickiness type. No stickiness if null (sourceIp, cookie)" + type: '- (Required) Valid values : http, internal, mysql, oco, pgsql, smtp, tcp' + url: '- URL for HTTP probe type.' + vrack_network_id: '- Internal Load Balancer identifier of the vRack private network to attach to your farm, mandatory when your Load Balancer is attached to a vRack' + zone: '- (Required) Zone where the farm will be defined (ie. GRA, BHS also supports ALL)' + importStatements: [] + ovh_iploadbalancing_http_farm_server: + subCategory: "" + name: ovh_iploadbalancing_http_farm_server + title: "" + examples: + - name: backend + manifest: |- + { + "address": "4.5.6.7", + "backup": true, + "display_name": "mybackend", + "farm_id": "${ovh_iploadbalancing_http_farm.farmname.id}", + "port": 80, + "probe": true, + "proxy_protocol_version": "v2", + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "ssl": false, + "status": "active", + "weight": 2 + } + dependencies: + ovh_iploadbalancing_http_farm.farmname: |- + { + "port": 8080, + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "zone": "all" + } + argumentDocs: + address: '- Address of the backend server (IP from either internal or OVHcloud network)' + backup: '- is it a backup server used in case of failure of all the non-backup backends' + cookie: '- Value of the stickiness cookie used for this backend.' + display_name: '- Label for the server' + farm_id: '- ID of the farm this server is attached to' + on_marked_down: '- enable action when backend marked down. (shutdown-sessions)' + port: '- Port that backend will respond on' + probe: '- defines if backend will be probed to determine health and keep as active in farm if healthy' + proxy_protocol_version: '- version of the PROXY protocol used to pass origin connection information from loadbalancer to receiving service (v1, v2, v2-ssl, v2-ssl-cn)' + service_name: '- (Required) The internal name of your IP load balancing' + ssl: '- is the connection ciphered with SSL (TLS)' + status: '- backend status - active or inactive' + weight: '- used in loadbalancing algorithm' + importStatements: [] + ovh_iploadbalancing_http_frontend: + subCategory: "" + name: ovh_iploadbalancing_http_frontend + title: "" + examples: + - name: testfrontend + manifest: |- + { + "default_farm_id": "${ovh_iploadbalancing_http_farm.farm80.id}", + "display_name": "ingress-8080-gra", + "port": "80,443", + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "zone": "all" + } + dependencies: + ovh_iploadbalancing_http_farm.farm80: |- + { + "display_name": "ingress-8080-gra", + "port": 80, + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "zone": "all" + } + argumentDocs: + allowed_source: '- Restrict IP Load Balancing access to these ip block. No restriction if null. List of IP blocks.' + dedicated_ipfo: '- Only attach frontend on these ip. No restriction if null. List of Ip blocks.' + default_farm_id: '- Default TCP Farm of your frontend' + default_ssl_id: '- Default ssl served to your customer' + disabled: '- Disable your frontend. Default: ''false''' + display_name: '- Human readable name for your frontend, this field is for you' + hsts: '- HTTP Strict Transport Security. Default: ''false''' + http_header: '- HTTP headers to add to the frontend. List of string.' + id: '- Id of your frontend' + port: |- + - Port(s) attached to your frontend. Supports single port (numerical value), + range (2 dash-delimited increasing ports) and comma-separated list of 'single port' + and/or 'range'. Each port must be in the [1;49151] range + redirect_location: '- Redirection HTTP''' + service_name: '- (Required) The internal name of your IP load balancing' + ssl: '- SSL deciphering. Default: ''false''' + zone: '- (Required) Zone where the frontend will be defined (ie. gra, bhs also supports all)' + importStatements: [] + ovh_iploadbalancing_http_route: + subCategory: "" + name: ovh_iploadbalancing_http_route + title: "" + examples: + - name: httpsredirect + manifest: |- + { + "action": [ + { + "status": 302, + "target": "https://${host}${path}${arguments}", + "type": "redirect" + } + ], + "display_name": "Redirect to HTTPS", + "service_name": "loadbalancer-xxxxxxxxxxxxxxxxxx", + "weight": 1 + } + argumentDocs: + action: '- (Required) Action triggered when all rules match' + display_name: '- Human readable name for your route, this field is for you' + field: '- Name of the field to match like "protocol" or "host" "/ipLoadbalancing/{serviceName}/route/availableRules" for a list of available rules' + frontend_id: '- Route traffic for this frontend' + match: '- Matching operator. Not all operators are available for all fields. See "availableRules"' + negate: '- Invert the matching operator effect' + pattern: '- Value to match against this match. Interpretation if this field depends on the match and field' + rule_id: '- Id of your rule' + rules: '- List of rules to match to trigger action' + service_name: '- (Required) The internal name of your IP load balancing' + status: '- HTTP status code for "redirect" and "reject" actions' + sub_field: '- Name of sub-field, if applicable. This may be a Cookie or Header name for instance' + target: '- Farm ID for "farm" action type or URL template for "redirect" action. You may use ${uri}, ${protocol}, ${host}, ${port} and ${path} variables in redirect target' + type: '- (Required) Action to trigger if all the rules of this route matches' + weight: '- Route priority ([0..255]). 0 if null. Highest priority routes are evaluated first. Only the first matching route will trigger an action' + importStatements: [] + ovh_iploadbalancing_http_route_rule: + subCategory: "" + name: ovh_iploadbalancing_http_route_rule + title: "" + examples: + - name: examplerule + manifest: |- + { + "display_name": "Match example.com host", + "field": "host", + "match": "is", + "negate": false, + "pattern": "example.com", + "route_id": "${ovh_iploadbalancing_http_route.httpsredirect.id}", + "service_name": "loadbalancer-xxxxxxxxxxxxxxxxxx" + } + dependencies: + ovh_iploadbalancing_http_route.httpsredirect: |- + { + "action": [ + { + "status": 302, + "target": "https://${host}${path}${arguments}", + "type": "redirect" + } + ], + "display_name": "Redirect to HTTPS", + "frontend_id": 11111, + "service_name": "loadbalancer-xxxxxxxxxxxxxxxxxx", + "weight": 1 + } + - name: examplerule + manifest: |- + { + "display_name": "Match example.com Host header", + "field": "headers", + "match": "is", + "negate": false, + "pattern": "example.com", + "route_id": "${ovh_iploadbalancing_http_route.httpsredirect.id}", + "service_name": "loadbalancer-xxxxxxxxxxxxxxxxxx", + "sub_field": "Host" + } + argumentDocs: + display_name: '- Human readable name for your rule, this field is for you' + field: '- (Required) Name of the field to match like "protocol" or "host". See "/ipLoadbalancing/{serviceName}/availableRouteRules" for a list of available rules' + match: '- (Required) Matching operator. Not all operators are available for all fields. See "/ipLoadbalancing/{serviceName}/availableRouteRules"' + negate: '- Invert the matching operator effect' + pattern: '- Value to match against this match. Interpretation if this field depends on the match and field' + route_id: '- (Required) The route to apply this rule' + service_name: '- (Required) The internal name of your IP load balancing' + sub_field: '- Name of sub-field, if applicable. This may be a Cookie or Header name for instance' + importStatements: [] + ovh_iploadbalancing_refresh: + subCategory: "" + name: ovh_iploadbalancing_refresh + title: "" + examples: + - name: mylb + manifest: |- + { + "keepers": [ + "${ovh_iploadbalancing_tcp_farm_server.backend.*.address}" + ], + "service_name": "${data.ovh_iploadbalancing.lb.service_name}" + } + dependencies: + ovh_iploadbalancing_tcp_farm.farmname: |- + { + "port": 8080, + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "zone": "all" + } + ovh_iploadbalancing_tcp_farm_server.backend: |- + { + "address": "4.5.6.7", + "backup": true, + "display_name": "mybackend", + "farm_id": "${ovh_iploadbalancing_tcp_farm.farmname.id}", + "port": 80, + "probe": true, + "proxy_protocol_version": "v2", + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "ssl": false, + "status": "active", + "weight": 2 + } + argumentDocs: + keepers: '- List of values tracked to trigger refresh, used also to form implicit dependencies' + service_name: '- (Required) The internal name of your IP load balancing' + importStatements: [] + ovh_iploadbalancing_tcp_farm: + subCategory: "" + name: ovh_iploadbalancing_tcp_farm + title: "" + examples: + - name: farmname + manifest: |- + { + "display_name": "ingress-8080-gra", + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "zone": "GRA" + } + argumentDocs: + balance: '- Load balancing algorithm. roundrobin if null (first, leastconn, roundrobin, source)' + display_name: '- Readable label for loadbalancer farm' + force_ssl: '- Force use of SSL (TLS)' + interval: '- probe interval, Value between 30 and 3600 seconds, default 30' + match: '- What to match pattern against (contains, default, internal, matches, status)' + method: '- HTTP probe method (GET, HEAD, OPTIONS, internal)' + negate: '- Negate probe result' + pattern: '- Pattern to match against match' + port: '- Port attached to your farm ([1..49151]). Inherited from frontend if null' + probe: '- define a backend healthcheck probe' + service_name: '- (Required) The internal name of your IP load balancing' + stickiness: "- \tStickiness type. No stickiness if null (sourceIp)" + type: '- (Required) Valid values : http, internal, mysql, oco, pgsql, smtp, tcp' + url: '- URL for HTTP probe type.' + vrack_network_id: '- Internal Load Balancer identifier of the vRack private network to attach to your farm, mandatory when your Load Balancer is attached to a vRack' + zone: '- (Required) Zone where the farm will be defined (ie. GRA, BHS also supports ALL)' + importStatements: [] + ovh_iploadbalancing_tcp_farm_server: + subCategory: "" + name: ovh_iploadbalancing_tcp_farm_server + title: "" + examples: + - name: backend + manifest: |- + { + "address": "4.5.6.7", + "backup": true, + "display_name": "mybackend", + "farm_id": "${ovh_iploadbalancing_tcp_farm.farmname.id}", + "port": 80, + "probe": true, + "proxy_protocol_version": "v2", + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "ssl": false, + "status": "active", + "weight": 2 + } + dependencies: + ovh_iploadbalancing_tcp_farm.farmname: |- + { + "port": 8080, + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "zone": "all" + } + argumentDocs: + address: '- Address of the backend server (IP from either internal or OVHcloud network)' + backup: '- is it a backup server used in case of failure of all the non-backup backends' + cookie: '- Value of the stickiness cookie used for this backend.' + display_name: '- Label for the server' + farm_id: '- ID of the farm this server is attached to' + on_marked_down: '- enable action when backend marked down. (shutdown-sessions)' + port: '- Port that backend will respond on' + probe: '- defines if backend will be probed to determine health and keep as active in farm if healthy' + proxy_protocol_version: '- version of the PROXY protocol used to pass origin connection information from loadbalancer to receiving service (v1, v2, v2-ssl, v2-ssl-cn)' + service_name: '- (Required) The internal name of your IP load balancing' + ssl: '- is the connection ciphered with SSL (TLS)' + status: '- backend status - active or inactive' + weight: '- used in loadbalancing algorithm' + importStatements: [] + ovh_iploadbalancing_tcp_frontend: + subCategory: "" + name: ovh_iploadbalancing_tcp_frontend + title: "" + examples: + - name: testfrontend + manifest: |- + { + "default_farm_id": "${ovh_iploadbalancing_tcp_farm.farm80.id}", + "display_name": "ingress-8080-gra", + "port": "80,443", + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "zone": "all" + } + dependencies: + ovh_iploadbalancing_tcp_farm.farm80: |- + { + "display_name": "ingress-8080-gra", + "port": 80, + "service_name": "${data.ovh_iploadbalancing.lb.service_name}", + "zone": "all" + } + argumentDocs: + allowed_source: '- Restrict IP Load Balancing access to these ip block. No restriction if null. List of IP blocks.' + dedicated_ipfo: '- Only attach frontend on these ip. No restriction if null. List of Ip blocks.' + default_farm_id: '- Default TCP Farm of your frontend' + default_ssl_id: '- Default ssl served to your customer' + disabled: '- Disable your frontend. Default: ''false''' + display_name: '- Human readable name for your frontend, this field is for you' + id: '- Id of your frontend' + port: |- + - Port(s) attached to your frontend. Supports single port (numerical value), + range (2 dash-delimited increasing ports) and comma-separated list of 'single port' + and/or 'range'. Each port must be in the [1;49151] range + service_name: '- (Required) The internal name of your IP load balancing' + ssl: '- SSL deciphering. Default: ''false''' + zone: '- (Required) Zone where the frontend will be defined (ie. gra, bhs also supports all)' + importStatements: [] + ovh_iploadbalancing_tcp_route: + subCategory: "" + name: ovh_iploadbalancing_tcp_route + title: "" + examples: + - name: tcpreject + manifest: |- + { + "action": [ + { + "type": "reject" + } + ], + "service_name": "loadbalancer-xxxxxxxxxxxxxxxxxx", + "weight": 1 + } + argumentDocs: + action: '- (Required) Action triggered when all rules match' + display_name: '- Human readable name for your route, this field is for you' + field: '- Name of the field to match like "protocol" or "host" "/ipLoadbalancing/{serviceName}/route/availableRules" for a list of available rules' + frontend_id: '- Route traffic for this frontend' + match: '- Matching operator. Not all operators are available for all fields. See "availableRules"' + negate: '- Invert the matching operator effect' + pattern: '- Value to match against this match. Interpretation if this field depends on the match and field' + rule_id: '- Id of your rule' + rules: '- List of rules to match to trigger action' + service_name: '- (Required) The internal name of your IP load balancing' + status: '- Route status. Routes in "ok" state are ready to operate' + sub_field: '- Name of sub-field, if applicable. This may be a Cookie or Header name for instance' + target: '- Farm ID for "farm" action type, empty for others.' + type: '- (Required) Action to trigger if all the rules of this route matches' + weight: '- Route priority ([0..255]). 0 if null. Highest priority routes are evaluated first. Only the first matching route will trigger an action' + importStatements: [] + ovh_iploadbalancing_tcp_route_rule: + subCategory: "" + name: ovh_iploadbalancing_tcp_route_rule + title: "" + examples: + - name: examplerule + manifest: |- + { + "display_name": "Match example.com host", + "field": "sni", + "match": "is", + "negate": false, + "pattern": "example.com", + "route_id": "${ovh_iploadbalancing_tcp_route.reject.id}", + "service_name": "loadbalancer-xxxxxxxxxxxxxxxxxx" + } + references: + route_id: ovh_iploadbalancing_tcp_route.reject.id + dependencies: + ovh_iploadbalancing_tcp_route.reject: |- + { + "action": [ + { + "type": "reject" + } + ], + "frontend_id": 11111, + "service_name": "loadbalancer-xxxxxxxxxxxxxxxxxx", + "weight": 1 + } + argumentDocs: + display_name: '- Human readable name for your rule, this field is for you' + field: '- (Required) Name of the field to match like "protocol" or "host". See "/ipLoadbalancing/{serviceName}/availableRouteRules" for a list of available rules' + match: '- (Required) Matching operator. Not all operators are available for all fields. See "/ipLoadbalancing/{serviceName}/availableRouteRules"' + negate: '- Invert the matching operator effect' + pattern: '- Value to match against this match. Interpretation if this field depends on the match and field' + route_id: '- (Required) The route to apply this rule' + service_name: '- (Required) The internal name of your IP load balancing' + sub_field: '- Name of sub-field, if applicable. This may be a Cookie or Header name for instance' + importStatements: [] + ovh_iploadbalancing_vrack_network: + subCategory: "" + name: ovh_iploadbalancing_vrack_network + title: "" + examples: + - name: network + manifest: |- + { + "display_name": "mynetwork", + "nat_ip": "10.0.0.0/27", + "service_name": "${ovh_vrack_iploadbalancing.viplb.ip_loadbalancing}", + "subnet": "10.0.0.0/16", + "vlan": 1 + } + references: + service_name: ovh_vrack_iploadbalancing.viplb.ip_loadbalancing + dependencies: + ovh_iploadbalancing_tcp_farm.testfarm: |- + { + "display_name": "mytcpbackends", + "port": 80, + "service_name": "${ovh_iploadbalancing_vrack_network.network.service_name}", + "vrack_network_id": "${ovh_iploadbalancing_vrack_network.network.vrack_network_id}", + "zone": "${tolist(data.ovh_iploadbalancing.iplb.zone)[0]}" + } + ovh_vrack_iploadbalancing.viplb: |- + { + "ip_loadbalancing": "${data.ovh_iploadbalancing.iplb.service_name}", + "service_name": "xxx" + } + argumentDocs: + display_name: '- Human readable name for your vrack network' + farm_id: '- This attribute is there for documentation purpose only and isnt passed to the OVHcloud API as it may conflicts with http/tcp farms vrack_network_id attribute' + nat_ip: '- (Required) An IP block used as a pool of IPs by this Load Balancer to connect to the servers in this private network. The blck must be in the private network and reserved for the Load Balancer' + service_name: '- (Required) The internal name of your IP load balancing' + subnet: '- (Required) IP block of the private network in the vRack' + vlan: '- VLAN of the private network in the vRack. 0 if the private network is not in a VLAN' + vrack_network_id: '- (Required) Internal Load Balancer identifier of the vRack private network' + importStatements: [] + ovh_me_identity_group: + subCategory: "" + name: ovh_me_identity_group + title: "" + examples: + - name: my_group + manifest: |- + { + "description": "Some custom description", + "name": "my_group_name", + "role": "NONE" + } + argumentDocs: + creation: '- Creation date of this group.' + default_group: '- Is the group a default and immutable one.' + description: '- Group description.' + last_update: '- Date of the last update of this group.' + name: '- Group name.' + role: '- Role associated with the group. Valid roles are ADMIN, REGULAR, UNPRIVILEGED, and NONE.' + urn: '- URN of the user group, used when writing IAM policies' + importStatements: [] + ovh_me_identity_user: + subCategory: "" + name: ovh_me_identity_user + title: "" + examples: + - name: my_user + manifest: |- + { + "description": "Some custom description", + "email": "my_login@example.com", + "group": "DEFAULT", + "login": "my_login", + "password": "super-s3cr3t!password" + } + argumentDocs: + creation: '- Creation date of this user.' + description: '- User description.' + email: '- User''s email.' + group: '- User''s group.' + last_update: '- Last update of this user.' + login: '- User''s login suffix.' + password: '- User''s password.' + password_last_update: '- When the user changed his password for the last time.' + status: '- Current user''s status.' + urn: '- URN of the user, used when writing IAM policies' + importStatements: [] + ovh_me_installation_template: + subCategory: "" + name: ovh_me_installation_template + title: "" + examples: + - name: mytemplate + manifest: |- + { + "base_template_name": "centos7_64", + "default_language": "en", + "template_name": "mytemplate" + } + argumentDocs: + available_languages: ': List of all language available for this template.' + base_template_name: ': (Required) The name of an existing installation template, choose one among the list given by ovh_dedicated_installation_templates datasource.' + beta: ': This distribution is new and, although tested and functional, may still display odd behaviour.' + bit_format: ': This template bit format (32 or 64).' + category: ': Category of this template (informative only). (basic, customer, hosting, other, readyToUse, virtualisation).' + change_log: ': (DEPRECATED) Template change log details.' + custom_hostname: ': Set up the server using the provided hostname instead of the default hostname.' + customization: ':' + default_language: ': (Required) The default language of this template.' + deprecated: ': is this distribution deprecated.' + description: ': information about this template.' + distribution: ': the distribution this template is based on.' + family: ': this template family type (bsd,linux,solaris,windows).' + filesystems: ': Filesystems available (btrfs,ext3,ext4,ntfs,reiserfs,swap,ufs,xfs,zfs).' + hard_raid_configuration: ': This distribution supports hardware raid configuration through the OVHcloud API.' + id: ': This template name.' + last_modification: ': Date of last modification of the base image.' + post_installation_script_link: ': Indicate the URL where your postinstall customisation script is located.' + post_installation_script_return: ': indicate the string returned by your postinstall customisation script on successful execution. Advice: your script should return a unique validation string in case of succes. A good example is ''loh1Xee7eo OK OK OK UGh8Ang1Gu''.' + rating: ': (DEPRECATED) Rating.' + remove_default_partition_schemes: ': (Required) Remove default partition schemes at creation.' + ssh_key_name: ': Name of the ssh key that should be installed. Password login will be disabled.' + supports_distribution_kernel: ': This distribution supports installation using the distribution''s native kernel instead of the recommended OVHcloud kernel.' + supports_rtm: ': This distribution supports RTM software.' + supports_sql_server: ': This distribution supports the microsoft SQL server.' + template_name: ': (Required) This template name.' + use_distribution_kernel: ': Use the distribution''s native kernel instead of the recommended OV' + importStatements: [] + ovh_me_installation_template_partition_scheme: + subCategory: "" + name: ovh_me_installation_template_partition_scheme + title: "" + examples: + - name: scheme + manifest: |- + { + "name": "myscheme", + "priority": 1, + "template_name": "${ovh_me_installation_template.mytemplate.template_name}" + } + references: + template_name: ovh_me_installation_template.mytemplate.template_name + dependencies: + ovh_me_installation_template.mytemplate: |- + { + "base_template_name": "centos7_64", + "default_language": "fr", + "template_name": "mytemplate" + } + argumentDocs: + id: ': a fake id associated with this partition scheme formatted as follow: template_name/name' + name: ': (Required) (Required) This partition scheme name.' + priority: ': on a reinstall, if a partitioning scheme is not specified, the one with the higher priority will be used by default, among all the compatible partitioning schemes (given the underlying hardware specifications).' + template_name: ': (Required) The template name of the partition scheme.' + importStatements: [] + ovh_me_installation_template_partition_scheme_hardware_raid: + subCategory: "" + name: ovh_me_installation_template_partition_scheme_hardware_raid + title: "" + examples: + - name: group1 + manifest: |- + { + "disks": [ + "[c1:d1,c1:d2,c1:d3]", + "[c1:d10,c1:d20,c1:d30]" + ], + "mode": "raid50", + "name": "group1", + "scheme_name": "${ovh_me_installation_template_partition_scheme.scheme.name}", + "step": 1, + "template_name": "${ovh_me_installation_template_partition_scheme.scheme.template_name}" + } + references: + scheme_name: ovh_me_installation_template_partition_scheme.scheme.name + template_name: ovh_me_installation_template_partition_scheme.scheme.template_name + dependencies: + ovh_me_installation_template.mytemplate: |- + { + "base_template_name": "centos7_64", + "default_language": "fr", + "template_name": "mytemplate" + } + ovh_me_installation_template_partition_scheme.scheme: |- + { + "name": "myscheme", + "priority": 1, + "template_name": "${ovh_me_installation_template.mytemplate.template_name}" + } + argumentDocs: + disks: ': Disk List. Syntax is cX:dY for disks and [cX:dY,cX:dY] for groups. With X and Y resp. the controller id and the disk id.' + id: ': a fake id associated with this partition scheme hardware raid group formatted as follow: template_name/scheme_name/name' + mode: ': RAID mode (raid0, raid1, raid10, raid5, raid50, raid6, raid60).' + name: ': Hardware RAID name.' + scheme_name: ': (Required) The partition scheme name.' + step: ': Specifies the creation order of the hardware RAID.' + template_name: ': (Required) The template name of the partition scheme.' + importStatements: [] + ovh_me_installation_template_partition_scheme_partition: + subCategory: "" + name: ovh_me_installation_template_partition_scheme_partition + title: "" + examples: + - name: root + manifest: |- + { + "filesystem": "ext4", + "mountpoint": "/", + "order": 1, + "scheme_name": "${ovh_me_installation_template_partition_scheme.scheme.name}", + "size": "400", + "template_name": "${ovh_me_installation_template_partition_scheme.scheme.template_name}", + "type": "primary" } + references: + scheme_name: ovh_me_installation_template_partition_scheme.scheme.name + template_name: ovh_me_installation_template_partition_scheme.scheme.template_name dependencies: - aws_instance.cluster: |- + ovh_me_installation_template.mytemplate: |- + { + "base_template_name": "centos7_64", + "default_language": "fr", + "template_name": "mytemplate" + } + ovh_me_installation_template_partition_scheme.scheme: |- + { + "name": "myscheme", + "priority": 1, + "template_name": "${ovh_me_installation_template.mytemplate.template_name}" + } + argumentDocs: + filesystem: ': Partition filesystem. Enum with possibles values:' + id: ': a fake id associated with this partition scheme partition formatted as follow: template_name/scheme_name/mountpoint' + mountpoint: ': (Required) partition mount point.' + order: ': step or order. specifies the creation order of the partition on the disk' + raid: ': raid partition type. Enum with possible values:' + scheme_name: ': (Required) The partition scheme name.' + size: ': size of partition in MB, 0 => rest of the space.' + template_name: ': (Required) The template name of the partition scheme.' + type: ': partition type. Enum with possible values:' + volume_name: ': The volume name needed for proxmox distribution' + importStatements: [] + ovh_me_ipxe_script: + subCategory: "" + name: ovh_me_ipxe_script + title: "" + examples: + - name: script + manifest: |- + { + "name": "myscript", + "script": "${file(\"${path.module}/boot.ipxe\")}" + } + argumentDocs: + description: '- For documentation purpose only. This attribute is not passed to the OVHcloud API as it cannot be retrieved back. Instead a fake description (''$name auto description'') is passed at creation time.' + name: '- (Required) The name of the IPXE Script.' + script: '- (Required) The content of the script.' + importStatements: [] + ovh_me_ssh_key: + subCategory: "" + name: ovh_me_ssh_key + title: "" + examples: + - name: mykey + manifest: |- + { + "key": "ssh-ed25519 AAAAC3...", + "key_name": "mykey" + } + argumentDocs: + default: '- True when this public SSH key is used for rescue mode and reinstallations.' + key: '- (Required) The content of the public key in the form "ssh-algo content", e.g. "ssh-ed25519 AAAAC3...".' + key_name: '- (Required) The friendly name of this SSH key.' + importStatements: [] + ovh_vrack: + subCategory: "" + name: ovh_vrack + title: "" + examples: + - name: vrack + manifest: |- + { + "description": "my vrack", + "name": "my vrack", + "ovh_subsidiary": "${data.ovh_order_cart.mycart.ovh_subsidiary}", + "plan": [ { - "count": 3 + "duration": "${data.ovh_order_cart_product_plan.vrack.selected_price.0.duration}", + "plan_code": "${data.ovh_order_cart_product_plan.vrack.plan_code}", + "pricing_mode": "${data.ovh_order_cart_product_plan.vrack.selected_price.0.pricing_mode}" } - argumentDocs: {} + ] + } + references: + ovh_subsidiary: data.ovh_order_cart.mycart.ovh_subsidiary + plan.duration: data.ovh_order_cart_product_plan.vrack.selected_price.0.duration + plan.plan_code: data.ovh_order_cart_product_plan.vrack.plan_code + plan.pricing_mode: data.ovh_order_cart_product_plan.vrack.selected_price.0.pricing_mode + argumentDocs: + catalog_name: '- Catalog name' + configuration: '- (Optional) Representation of a configuration item for personalizing product' + date: '- date' + description: '- yourvrackdescription' + details: '- Information about a Bill entry' + domain: '- expiration date' + duration: '- (Required) duration' + expiration_date: '- expiration date' + label: '- (Required) Identifier of the resource' + name: '- yourvrackname' + order: '- Details about an Order' + order_detail_id: '- order detail id' + order_id: '- order id' + ovh_subsidiary: '- (Required) OVHcloud Subsidiary. Country of OVHcloud legal entity you''ll be billed by. List of supported subsidiaries available on API at /1.0/me.json under' + plan: '- (Required) Product Plan to order' + plan_code: '- (Required) Plan code' + plan_option: '- (Optional) Product Plan to order' + pricing_mode: '- (Required) Pricing model identifier' + quantity: '- quantity' + service_name: '- The internal name of your vrack' + urn: '- The URN of the vrack, used with IAM permissions' + value: '- (Required) Path to the resource in API.OVH.COM' + importStatements: [] + ovh_vrack_cloudproject: + subCategory: "" + name: ovh_vrack_cloudproject + title: "" + examples: + - name: vcp + manifest: |- + { + "project_id": "67890", + "service_name": "12345" + } + argumentDocs: + project_id: |- + - (Required) The id of the public cloud project. If omitted, + the OVH_CLOUD_PROJECT_SERVICE environment variable is used. + service_name: |- + - (Required) The service name of the vrack. If omitted, + the OVH_VRACK_SERVICE environment variable is used. + importStatements: [] + ovh_vrack_dedicated_server: + subCategory: "" + name: ovh_vrack_dedicated_server + title: "" + examples: + - name: vds + manifest: |- + { + "server_id": "67890", + "service_name": "XXXX" + } + argumentDocs: + server_id: '- (Required) The id of the dedicated server.' + service_name: |- + - (Required) The service name of the vrack. If omitted, + the OVH_VRACK_SERVICE environment variable is used. + importStatements: [] + ovh_vrack_dedicated_server_interface: + subCategory: "" + name: ovh_vrack_dedicated_server_interface + title: "" + examples: + - name: vdsi + manifest: |- + { + "interface_id": "${data.ovh_dedicated_server.server.enabled_vrack_vnis[0]}", + "service_name": "pn-xxxxxxx" + } + references: + interface_id: data.ovh_dedicated_server.server.enabled_vrack_vnis[0] + argumentDocs: + interface_id: '- (Required) The id of dedicated server network interface.' + service_name: |- + - (Required) The id of the vrack. If omitted, + the OVH_VRACK_SERVICE environment variable is used. + importStatements: [] + ovh_vrack_iploadbalancing: + subCategory: "" + name: ovh_vrack_iploadbalancing + title: "" + examples: + - name: viplb + manifest: |- + { + "ip_loadbalancing": "yyy", + "service_name": "xxx" + } + argumentDocs: + ip_loadbalancing: '- (Required) The id of the IP Load Balancing.' + service_name: '- (Required) The id of the vrack.' importStatements: [] diff --git a/config/provider.go b/config/provider.go index 7f53564..8cc5a90 100644 --- a/config/provider.go +++ b/config/provider.go @@ -10,12 +10,14 @@ import ( ujconfig "github.com/crossplane/upjet/pkg/config" - "github.com/upbound/upjet-provider-template/config/null" + "github.com/saagie/upjet-provider-ovh/config/database" + "github.com/saagie/upjet-provider-ovh/config/kube" + "github.com/saagie/upjet-provider-ovh/config/user" ) const ( - resourcePrefix = "template" - modulePath = "github.com/upbound/upjet-provider-template" + resourcePrefix = "ovh" + modulePath = "github.com/saagie/upjet-provider-ovh" ) //go:embed schema.json @@ -27,7 +29,7 @@ var providerMetadata string // GetProvider returns provider configuration func GetProvider() *ujconfig.Provider { pc := ujconfig.NewProvider([]byte(providerSchema), resourcePrefix, modulePath, []byte(providerMetadata), - ujconfig.WithRootGroup("template.upbound.io"), + ujconfig.WithRootGroup("ovh.saagie.io"), ujconfig.WithIncludeList(ExternalNameConfigured()), ujconfig.WithFeaturesPackage("internal/features"), ujconfig.WithDefaultResourceOptions( @@ -36,7 +38,9 @@ func GetProvider() *ujconfig.Provider { for _, configure := range []func(provider *ujconfig.Provider){ // add custom config functions - null.Configure, + database.Configure, + kube.Configure, + user.Configure, } { configure(pc) } diff --git a/config/schema.json b/config/schema.json index d160792..68c250d 100644 --- a/config/schema.json +++ b/config/schema.json @@ -1 +1 @@ -{"format_version":"1.0","provider_schemas":{"registry.terraform.io/hashicorp/null":{"provider":{"version":0,"block":{"description_kind":"plain"}},"resource_schemas":{"null_resource":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"This is set to a random value at create time.","description_kind":"markdown","computed":true},"triggers":{"type":["map","string"],"description":"A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners.","description_kind":"markdown","optional":true}},"description":"The `null_resource` resource implements the standard resource lifecycle but takes no further action.\n\nThe `triggers` argument allows specifying an arbitrary set of values that, when changed, will cause the resource to be replaced.","description_kind":"markdown"}}},"data_source_schemas":{"null_data_source":{"version":0,"block":{"attributes":{"has_computed_default":{"type":"string","description":"If set, its literal value will be stored and returned. If not, its value defaults to `\"default\"`. This argument exists primarily for testing and has little practical use.","description_kind":"markdown","optional":true,"computed":true},"id":{"type":"string","description":"This attribute is only present for some legacy compatibility issues and should not be used. It will be removed in a future version.","description_kind":"markdown","deprecated":true,"computed":true},"inputs":{"type":["map","string"],"description":"A map of arbitrary strings that is copied into the `outputs` attribute, and accessible directly for interpolation.","description_kind":"markdown","optional":true},"outputs":{"type":["map","string"],"description":"After the data source is \"read\", a copy of the `inputs` map.","description_kind":"markdown","computed":true},"random":{"type":"string","description":"A random value. This is primarily for testing and has little practical use; prefer the [hashicorp/random provider](https://registry.terraform.io/providers/hashicorp/random) for more practical random number use-cases.","description_kind":"markdown","computed":true}},"description":"The `null_data_source` data source implements the standard data source lifecycle but does not\ninteract with any external APIs.\n\nHistorically, the `null_data_source` was typically used to construct intermediate values to re-use elsewhere in configuration. The\nsame can now be achieved using [locals](https://www.terraform.io/docs/language/values/locals.html).\n","description_kind":"markdown","deprecated":true}}}}}} +{"format_version":"1.0","provider_schemas":{"registry.terraform.io/ovh/ovh":{"provider":{"version":0,"block":{"attributes":{"application_key":{"type":"string","description":"The OVH API Application Key.","description_kind":"plain","optional":true},"application_secret":{"type":"string","description":"The OVH API Application Secret.","description_kind":"plain","optional":true},"consumer_key":{"type":"string","description":"The OVH API Consumer key.","description_kind":"plain","optional":true},"endpoint":{"type":"string","description":"The OVH API endpoint to target (ex: \"ovh-eu\").","description_kind":"plain","required":true}},"description_kind":"plain"}},"resource_schemas":{"ovh_cloud_project":{"version":0,"block":{"attributes":{"access":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"order":{"type":["list",["object",{"date":"string","details":["list",["object",{"description":"string","domain":"string","order_detail_id":"number","quantity":"string"}]],"expiration_date":"string","order_id":"number"}]],"description":"Details about an Order","description_kind":"plain","computed":true},"ovh_subsidiary":{"type":"string","description":"Ovh Subsidiary","description_kind":"plain","required":true},"payment_mean":{"type":"string","description":"Ovh payment mode","description_kind":"plain","deprecated":true,"optional":true},"project_id":{"type":"string","description_kind":"plain","computed":true},"project_name":{"type":"string","description_kind":"plain","computed":true},"status":{"type":"string","description_kind":"plain","computed":true},"urn":{"type":"string","description_kind":"plain","computed":true}},"block_types":{"plan":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"},"min_items":1,"max_items":1},"plan_option":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_containerregistry":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"Registry creation date","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Registry name","description_kind":"plain","required":true},"plan":{"type":["list",["object",{"code":"string","created_at":"string","features":["list",["object",{"vulnerability":"bool"}]],"id":"string","name":"string","registry_limits":["list",["object",{"image_storage":"number","parallel_request":"number"}]],"updated_at":"string"}]],"description":"Plan of the registry","description_kind":"plain","computed":true},"plan_id":{"type":"string","description":"Plan ID of the registry.","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"Project ID of your registry","description_kind":"plain","computed":true},"region":{"type":"string","description":"Region of the registry.","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"size":{"type":"number","description":"Current size of the registry (bytes)","description_kind":"plain","computed":true},"status":{"type":"string","description":"Registry status","description_kind":"plain","computed":true},"updated_at":{"type":"string","description":"Registry last update date","description_kind":"plain","computed":true},"url":{"type":"string","description":"Access url of the registry","description_kind":"plain","computed":true},"version":{"type":"string","description":"Version of your registry","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_containerregistry_oidc":{"version":0,"block":{"attributes":{"delete_users":{"type":"bool","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"oidc_admin_group":{"type":"string","description_kind":"plain","optional":true},"oidc_auto_onboard":{"type":"bool","description_kind":"plain","optional":true},"oidc_client_id":{"type":"string","description_kind":"plain","required":true},"oidc_client_secret":{"type":"string","description_kind":"plain","required":true,"sensitive":true},"oidc_endpoint":{"type":"string","description_kind":"plain","required":true},"oidc_groups_claim":{"type":"string","description_kind":"plain","optional":true},"oidc_name":{"type":"string","description_kind":"plain","required":true},"oidc_scope":{"type":"string","description_kind":"plain","required":true},"oidc_user_claim":{"type":"string","description_kind":"plain","optional":true},"oidc_verify_cert":{"type":"bool","description_kind":"plain","optional":true},"registry_id":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"default":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_containerregistry_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"User email.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"login":{"type":"string","description":"Registry name","description_kind":"plain","required":true},"password":{"type":"string","description":"User password","description_kind":"plain","computed":true,"sensitive":true},"registry_id":{"type":"string","description":"RegistryID","description_kind":"plain","required":true},"service_name":{"type":"string","description":"Service name","description_kind":"plain","required":true},"user":{"type":"string","description":"User name","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database":{"version":0,"block":{"attributes":{"advanced_configuration":{"type":["map","string"],"description":"Advanced configuration key / value","description_kind":"plain","optional":true,"computed":true},"backup_time":{"type":"string","description":"Time on which backups start every day","description_kind":"plain","computed":true},"created_at":{"type":"string","description":"Date of the creation of the cluster","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description of the cluster","description_kind":"plain","optional":true},"disk_size":{"type":"number","description":"Disk size attributes of the cluster","description_kind":"plain","optional":true,"computed":true},"disk_type":{"type":"string","description":"Disk type attributes of the cluster","description_kind":"plain","computed":true},"endpoints":{"type":["list",["object",{"component":"string","domain":"string","path":"string","port":"number","scheme":"string","ssl":"bool","ssl_mode":"string","uri":"string"}]],"description":"List of all endpoints of the service","description_kind":"plain","computed":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"flavor":{"type":"string","description":"The node flavor used for this cluster","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kafka_rest_api":{"type":"bool","description":"Defines whether the REST API is enabled on a Kafka cluster","description_kind":"plain","optional":true},"maintenance_time":{"type":"string","description":"Time on which maintenances can start every day","description_kind":"plain","computed":true},"network_type":{"type":"string","description":"Type of network of the cluster","description_kind":"plain","computed":true},"opensearch_acls_enabled":{"type":"bool","description":"Defines whether the ACLs are enabled on an Opensearch cluster","description_kind":"plain","optional":true},"plan":{"type":"string","description":"Plan of the cluster","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the cluster","description_kind":"plain","computed":true},"version":{"type":"string","description":"Version of the engine deployed on the cluster","description_kind":"plain","required":true}},"block_types":{"nodes":{"nesting_mode":"list","block":{"attributes":{"network_id":{"type":"string","description":"Private network ID in which the node is. It's the regional openstackId of the private network.","description_kind":"plain","optional":true},"region":{"type":"string","description":"Region of the node","description_kind":"plain","required":true},"subnet_id":{"type":"string","description":"Private subnet ID in which the node is","description_kind":"plain","optional":true}},"description":"List of nodes composing the service","description_kind":"plain"},"min_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_database":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"default":{"type":"bool","description":"Defines if the database has been created by default","description_kind":"plain","computed":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Database name","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_integration":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"destination_service_id":{"type":"string","description":"ID of the destination service","description_kind":"plain","required":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"parameters":{"type":["map","string"],"description":"Parameters for the integration","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"source_service_id":{"type":"string","description":"ID of the source service","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the integration","description_kind":"plain","computed":true},"type":{"type":"string","description":"Type of the integration","description_kind":"plain","optional":true,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_ip_restriction":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"description":{"type":"string","description":"Description of the IP restriction","description_kind":"plain","optional":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip":{"type":"string","description":"Authorized IP","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the IP restriction","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_kafka_acl":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"permission":{"type":"string","description":"Permission to give to this username on this topic","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"topic":{"type":"string","description":"Topic affected by this acl","description_kind":"plain","required":true},"username":{"type":"string","description":"Username affected by this acl","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_kafka_schemaregistryacl":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"permission":{"type":"string","description":"Permission to give to this username on this resource","description_kind":"plain","required":true},"resource":{"type":"string","description":"Resource affected by this acl","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"username":{"type":"string","description":"Username affected by this acl","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_kafka_topic":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"min_insync_replicas":{"type":"number","description":"Minimum insync replica accepted for this topic","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the topic","description_kind":"plain","required":true},"partitions":{"type":"number","description":"Number of partitions for this topic","description_kind":"plain","optional":true,"computed":true},"replication":{"type":"number","description":"Number of replication for this topic","description_kind":"plain","optional":true,"computed":true},"retention_bytes":{"type":"number","description":"Number of bytes for the retention of the data for this topic","description_kind":"plain","optional":true,"computed":true},"retention_hours":{"type":"number","description":"Number of hours for the retention of the data for this topic","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_m3db_namespace":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the namespace","description_kind":"plain","required":true},"resolution":{"type":"string","description":"Resolution for an aggregated namespace","description_kind":"plain","required":true},"retention_block_data_expiration_duration":{"type":"string","description":"Controls how long we wait before expiring stale data","description_kind":"plain","optional":true},"retention_block_size_duration":{"type":"string","description":"Controls how long to keep a block in memory before flushing to a fileset on disk","description_kind":"plain","optional":true,"computed":true},"retention_buffer_future_duration":{"type":"string","description":"Controls how far into the future writes to the namespace will be accepted","description_kind":"plain","optional":true},"retention_buffer_past_duration":{"type":"string","description":"Controls how far into the past writes to the namespace will be accepted","description_kind":"plain","optional":true},"retention_period_duration":{"type":"string","description":"Controls the duration of time that M3DB will retain data for the namespace","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"snapshot_enabled":{"type":"bool","description":"Defines whether M3db will create snapshot files for this namespace","description_kind":"plain","optional":true},"type":{"type":"string","description":"Type of namespace","description_kind":"plain","computed":true},"writes_to_commit_log_enabled":{"type":"bool","description":"Defines whether M3db will include writes to this namespace in the commit log","description_kind":"plain","optional":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_m3db_user":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"group":{"type":"string","description":"Group of the user","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the user","description_kind":"plain","required":true},"password":{"type":"string","description":"Password of the user","description_kind":"plain","computed":true,"sensitive":true},"password_reset":{"type":"string","description":"Arbitrary string to change to trigger a password update","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_mongodb_user":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the user","description_kind":"plain","required":true},"password":{"type":"string","description":"Password of the user","description_kind":"plain","computed":true,"sensitive":true},"password_reset":{"type":"string","description":"Arbitrary string to change to trigger a password update","description_kind":"plain","optional":true},"roles":{"type":["set","string"],"description":"Roles the user belongs to (without authentication database)","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_opensearch_pattern":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"max_index_count":{"type":"number","description":"Maximum number of index for this pattern","description_kind":"plain","optional":true},"pattern":{"type":"string","description":"Pattern format","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_opensearch_user":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the user","description_kind":"plain","required":true},"password":{"type":"string","description":"Password of the user","description_kind":"plain","computed":true,"sensitive":true},"password_reset":{"type":"string","description":"Arbitrary string to change to trigger a password update","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"block_types":{"acls":{"nesting_mode":"set","block":{"attributes":{"pattern":{"type":"string","description":"Pattern of the ACL","description_kind":"plain","required":true},"permission":{"type":"string","description":"Permission of the ACL","description_kind":"plain","required":true}},"description":"Acls of the user","description_kind":"plain"}},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_postgresql_user":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the user","description_kind":"plain","required":true},"password":{"type":"string","description":"Password of the user","description_kind":"plain","computed":true,"sensitive":true},"password_reset":{"type":"string","description":"Arbitrary string to change to trigger a password update","description_kind":"plain","optional":true},"roles":{"type":["set","string"],"description":"Roles the user belongs to","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_redis_user":{"version":0,"block":{"attributes":{"categories":{"type":["set","string"],"description":"Categories of the user","description_kind":"plain","optional":true},"channels":{"type":["set","string"],"description":"Channels of the user","description_kind":"plain","optional":true,"computed":true},"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"commands":{"type":["set","string"],"description":"Commands of the user","description_kind":"plain","optional":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"keys":{"type":["set","string"],"description":"Keys of the user","description_kind":"plain","optional":true},"name":{"type":"string","description":"Name of the user","description_kind":"plain","required":true},"password":{"type":"string","description":"Password of the user","description_kind":"plain","computed":true,"sensitive":true},"password_reset":{"type":"string","description":"Arbitrary string to change to trigger a password update","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_database_user":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the user","description_kind":"plain","required":true},"password":{"type":"string","description":"Password of the user","description_kind":"plain","computed":true,"sensitive":true},"password_reset":{"type":"string","description":"Arbitrary string to change to trigger a password update","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_failover_ip_attach":{"version":0,"block":{"attributes":{"block":{"type":"string","description":"IP block","description_kind":"plain","optional":true,"computed":true},"continent_code":{"type":"string","description":"Ip continent","description_kind":"plain","optional":true,"computed":true},"geo_loc":{"type":"string","description":"Ip location","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"Ip id","description_kind":"plain","computed":true},"ip":{"type":"string","description":"Ip","description_kind":"plain","optional":true,"computed":true},"progress":{"type":"number","description":"Current operation progress in percent","description_kind":"plain","computed":true},"routed_to":{"type":"string","description":"Instance where ip is routed to","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"The service name","description_kind":"plain","required":true},"status":{"type":"string","description":"Ip status","description_kind":"plain","computed":true},"sub_type":{"type":"string","description":"IP sub type","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_kube":{"version":0,"block":{"attributes":{"control_plane_is_up_to_date":{"type":"bool","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_up_to_date":{"type":"bool","description_kind":"plain","computed":true},"kube_proxy_mode":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kubeconfig":{"type":"string","description_kind":"plain","computed":true,"sensitive":true},"kubeconfig_attributes":{"type":["list",["object",{"client_certificate":"string","client_key":"string","cluster_ca_certificate":"string","host":"string"}]],"description":"The kubeconfig configuration file of the Kubernetes cluster","description_kind":"plain","computed":true,"sensitive":true},"name":{"type":"string","description_kind":"plain","optional":true},"next_upgrade_versions":{"type":["set","string"],"description_kind":"plain","computed":true},"nodes_url":{"type":"string","description_kind":"plain","computed":true},"private_network_id":{"type":"string","description_kind":"plain","optional":true},"region":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description_kind":"plain","computed":true},"update_policy":{"type":"string","description_kind":"plain","optional":true,"computed":true},"url":{"type":"string","description_kind":"plain","computed":true},"version":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"block_types":{"customization":{"nesting_mode":"set","block":{"block_types":{"apiserver":{"nesting_mode":"set","block":{"block_types":{"admissionplugins":{"nesting_mode":"set","block":{"attributes":{"disabled":{"type":["list","string"],"description_kind":"plain","optional":true,"computed":true},"enabled":{"type":["list","string"],"description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}}},"description_kind":"plain","deprecated":true}}},"description_kind":"plain","deprecated":true}},"customization_apiserver":{"nesting_mode":"set","block":{"block_types":{"admissionplugins":{"nesting_mode":"set","block":{"attributes":{"disabled":{"type":["list","string"],"description_kind":"plain","optional":true,"computed":true},"enabled":{"type":["list","string"],"description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"customization_kube_proxy":{"nesting_mode":"set","block":{"block_types":{"iptables":{"nesting_mode":"set","block":{"attributes":{"min_sync_period":{"type":"string","description_kind":"plain","optional":true},"sync_period":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"ipvs":{"nesting_mode":"set","block":{"attributes":{"min_sync_period":{"type":"string","description_kind":"plain","optional":true},"scheduler":{"type":"string","description_kind":"plain","optional":true},"sync_period":{"type":"string","description_kind":"plain","optional":true},"tcp_fin_timeout":{"type":"string","description_kind":"plain","optional":true},"tcp_timeout":{"type":"string","description_kind":"plain","optional":true},"udp_timeout":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"max_items":1},"private_network_configuration":{"nesting_mode":"set","block":{"attributes":{"default_vrack_gateway":{"type":"string","description":"If defined, all egress traffic will be routed towards this IP address, which should belong to the private network. Empty string means disabled.","description_kind":"plain","required":true},"private_network_routing_as_default":{"type":"bool","description":"Defines whether routing should default to using the nodes' private interface, instead of their public interface. Default is false.","description_kind":"plain","required":true}},"description_kind":"plain"},"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"default":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_kube_iprestrictions":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ips":{"type":["set","string"],"description":"List of IP restrictions for the cluster","description_kind":"plain","required":true},"kube_id":{"type":"string","description":"Kube ID","description_kind":"plain","required":true},"service_name":{"type":"string","description":"Service name","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"default":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_kube_nodepool":{"version":0,"block":{"attributes":{"anti_affinity":{"type":"bool","description":"Enable anti affinity groups for nodes in the pool","description_kind":"plain","optional":true,"computed":true},"autoscale":{"type":"bool","description":"Enable auto-scaling for the pool","description_kind":"plain","optional":true,"computed":true},"available_nodes":{"type":"number","description":"Number of nodes which are actually ready in the pool","description_kind":"plain","computed":true},"created_at":{"type":"string","description":"Creation date","description_kind":"plain","computed":true},"current_nodes":{"type":"number","description":"Number of nodes present in the pool","description_kind":"plain","computed":true},"desired_nodes":{"type":"number","description":"Number of nodes you desire in the pool","description_kind":"plain","optional":true,"computed":true},"flavor":{"type":"string","description":"Flavor name","description_kind":"plain","computed":true},"flavor_name":{"type":"string","description":"Flavor name","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kube_id":{"type":"string","description":"Kube ID","description_kind":"plain","required":true},"max_nodes":{"type":"number","description":"Number of nodes you desire in the pool","description_kind":"plain","optional":true,"computed":true},"min_nodes":{"type":"number","description":"Number of nodes you desire in the pool","description_kind":"plain","optional":true,"computed":true},"monthly_billed":{"type":"bool","description":"Enable monthly billing on all nodes in the pool","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"NodePool resource name","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"Project id","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"Service name","description_kind":"plain","required":true},"size_status":{"type":"string","description":"Status describing the state between number of nodes wanted and available ones","description_kind":"plain","computed":true},"status":{"type":"string","description":"Current status","description_kind":"plain","computed":true},"up_to_date_nodes":{"type":"number","description":"Number of nodes with latest version installed in the pool","description_kind":"plain","computed":true},"updated_at":{"type":"string","description":"Last update date","description_kind":"plain","computed":true}},"block_types":{"template":{"nesting_mode":"set","block":{"block_types":{"metadata":{"nesting_mode":"set","block":{"attributes":{"annotations":{"type":["map","string"],"description":"annotations","description_kind":"plain","required":true},"finalizers":{"type":["list","string"],"description":"finalizers","description_kind":"plain","required":true},"labels":{"type":["map","string"],"description":"labels","description_kind":"plain","required":true}},"description":"metadata","description_kind":"plain"},"min_items":1,"max_items":1},"spec":{"nesting_mode":"set","block":{"attributes":{"taints":{"type":["list",["map","string"]],"description":"taints","description_kind":"plain","required":true},"unschedulable":{"type":"bool","description":"unschedulable","description_kind":"plain","required":true}},"description":"spec","description_kind":"plain"},"min_items":1,"max_items":1}},"description":"Node pool template","description_kind":"plain"},"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"default":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_kube_oidc":{"version":0,"block":{"attributes":{"client_id":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"issuer_url":{"type":"string","description_kind":"plain","required":true},"kube_id":{"type":"string","description_kind":"plain","required":true},"oidc_ca_content":{"type":"string","description_kind":"plain","optional":true},"oidc_groups_claim":{"type":["list","string"],"description_kind":"plain","optional":true},"oidc_groups_prefix":{"type":"string","description_kind":"plain","optional":true},"oidc_required_claim":{"type":["list","string"],"description_kind":"plain","optional":true},"oidc_signing_algs":{"type":["list","string"],"description_kind":"plain","optional":true},"oidc_username_claim":{"type":"string","description_kind":"plain","optional":true},"oidc_username_prefix":{"type":"string","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"default":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_cloud_project_network_private":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description_kind":"plain","required":true},"regions":{"type":["set","string"],"description_kind":"plain","optional":true,"computed":true},"regions_attributes":{"type":["set",["object",{"openstackid":"string","region":"string","status":"string"}]],"description_kind":"plain","computed":true},"regions_status":{"type":["set",["object",{"region":"string","status":"string"}]],"description_kind":"plain","deprecated":true,"computed":true},"service_name":{"type":"string","description":"Service name of the resource representing the id of the cloud project.","description_kind":"plain","required":true},"status":{"type":"string","description_kind":"plain","computed":true},"type":{"type":"string","description_kind":"plain","computed":true},"vlan_id":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"}},"ovh_cloud_project_network_private_subnet":{"version":0,"block":{"attributes":{"cidr":{"type":"string","description_kind":"plain","computed":true},"dhcp":{"type":"bool","description_kind":"plain","optional":true},"end":{"type":"string","description_kind":"plain","required":true},"gateway_ip":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_pools":{"type":["set",["object",{"dhcp":"bool","end":"string","network":"string","region":"string","start":"string"}]],"description_kind":"plain","computed":true},"network":{"type":"string","description_kind":"plain","required":true},"network_id":{"type":"string","description_kind":"plain","required":true},"no_gateway":{"type":"bool","description_kind":"plain","optional":true},"region":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description":"Service name of the resource representing the id of the cloud project.","description_kind":"plain","required":true},"start":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_region_storage_presign":{"version":0,"block":{"attributes":{"expire":{"type":"number","description":"How long (in seconds) the URL will be valid.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"method":{"type":"string","description_kind":"plain","required":true},"name":{"type":"string","description":"The S3 storage container's name.","description_kind":"plain","required":true},"object":{"type":"string","description":"Name of the object to download or upload.","description_kind":"plain","required":true},"region_name":{"type":"string","description":"Region name.","description_kind":"plain","required":true},"service_name":{"type":"string","description":"Service name of the resource representing the ID of the cloud project.","description_kind":"plain","required":true},"url":{"type":"string","description":"Presigned URL.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_user":{"version":0,"block":{"attributes":{"creation_date":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"openstack_rc":{"type":["map","string"],"description_kind":"plain","optional":true,"computed":true},"password":{"type":"string","description_kind":"plain","computed":true,"sensitive":true},"role_name":{"type":"string","description_kind":"plain","optional":true},"role_names":{"type":["list","string"],"description_kind":"plain","optional":true},"roles":{"type":["list",["object",{"description":"string","id":"string","name":"string","permissions":["set","string"]}]],"description_kind":"plain","computed":true},"service_name":{"type":"string","description":"Service name of the resource representing the id of the cloud project.","description_kind":"plain","required":true},"status":{"type":"string","description_kind":"plain","computed":true},"username":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_user_s3_credential":{"version":0,"block":{"attributes":{"access_key_id":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"internal_user_id":{"type":"string","description_kind":"plain","computed":true},"secret_access_key":{"type":"string","description_kind":"plain","computed":true,"sensitive":true},"service_name":{"type":"string","description":"Service name of the resource representing the ID of the cloud project.","description_kind":"plain","required":true},"user_id":{"type":"string","description":"The user ID","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_user_s3_policy":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"policy":{"type":"string","description":"The policy document. This is a JSON formatted string.","description_kind":"plain","required":true},"service_name":{"type":"string","description":"Service name of the resource representing the ID of the cloud project.","description_kind":"plain","required":true},"user_id":{"type":"string","description":"The user ID","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_workflow_backup":{"version":0,"block":{"attributes":{"backup_name":{"type":"string","description_kind":"plain","optional":true,"computed":true},"created_at":{"type":"string","description_kind":"plain","computed":true},"cron":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","computed":true},"instance_id":{"type":"string","description_kind":"plain","required":true},"max_execution_count":{"type":"number","description_kind":"plain","optional":true},"name":{"type":"string","description_kind":"plain","required":true},"region_name":{"type":"string","description":"Region name.","description_kind":"plain","required":true},"rotation":{"type":"number","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_dbaas_logs_cluster":{"version":0,"block":{"attributes":{"archive_allowed_networks":{"type":["set","string"],"description":"Allowed networks for ARCHIVE flow type","description_kind":"plain","optional":true},"cluster_type":{"type":"string","description":"Cluster type","description_kind":"plain","computed":true},"dedicated_input_pem":{"type":"string","description":"PEM for dedicated inputs","description_kind":"plain","computed":true,"sensitive":true},"direct_input_allowed_networks":{"type":["set","string"],"description":"Allowed networks for DIRECT_INPUT flow type","description_kind":"plain","optional":true},"direct_input_pem":{"type":"string","description":"PEM for direct inputs","description_kind":"plain","computed":true,"sensitive":true},"hostname":{"type":"string","description":"hostname","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"initial_archive_allowed_networks":{"type":["set","string"],"description":"Initial allowed networks for ARCHIVE flow type","description_kind":"plain","computed":true,"sensitive":true},"initial_direct_input_allowed_networks":{"type":["set","string"],"description":"Initial allowed networks for DIRECT_INPUT flow type","description_kind":"plain","computed":true,"sensitive":true},"initial_query_allowed_networks":{"type":["set","string"],"description":"Initial allowed networks for QUERY flow type","description_kind":"plain","computed":true,"sensitive":true},"is_default":{"type":"bool","description":"All content generated by given service will be placed on this cluster","description_kind":"plain","computed":true},"is_unlocked":{"type":"bool","description":"Allow given service to perform advanced operations on cluster","description_kind":"plain","computed":true},"query_allowed_networks":{"type":["set","string"],"description":"Allowed networks for QUERY flow type","description_kind":"plain","optional":true},"region":{"type":"string","description":"Data center localization","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_dbaas_logs_input":{"version":0,"block":{"attributes":{"allowed_networks":{"type":["list","string"],"description":"IP blocks","description_kind":"plain","optional":true,"computed":true},"created_at":{"type":"string","description":"Input creation","description_kind":"plain","computed":true},"description":{"type":"string","description":"Input description","description_kind":"plain","required":true},"engine_id":{"type":"string","description":"Input engine ID","description_kind":"plain","required":true},"exposed_port":{"type":"string","description":"Port","description_kind":"plain","optional":true,"computed":true},"hostname":{"type":"string","description":"Hostname","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"input_id":{"type":"string","description":"Input ID","description_kind":"plain","computed":true},"is_restart_required":{"type":"bool","description":"Indicate if input need to be restarted","description_kind":"plain","computed":true},"nb_instance":{"type":"number","description":"Number of instance running","description_kind":"plain","optional":true,"computed":true},"public_address":{"type":"string","description":"Input IP address","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"ssl_certificate":{"type":"string","description":"Input SSL certificate","description_kind":"plain","computed":true,"sensitive":true},"status":{"type":"string","description":"init: configuration required, pending: ready to start, running: available","description_kind":"plain","computed":true},"stream_id":{"type":"string","description":"Associated Graylog stream","description_kind":"plain","required":true},"title":{"type":"string","description":"Input title","description_kind":"plain","required":true},"updated_at":{"type":"string","description":"Input last update","description_kind":"plain","computed":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"block_types":{"flowgger":{"nesting_mode":"list","block":{"attributes":{"log_format":{"type":"string","description":"Type of format to decode","description_kind":"plain","required":true},"log_framing":{"type":"string","description":"Indicates how messages are delimited","description_kind":"plain","required":true}},"description":"Flowgger configuration","description_kind":"plain"},"max_items":1},"logstash":{"nesting_mode":"list","block":{"attributes":{"filter_section":{"type":"string","description":"The filter section of logstash.conf","description_kind":"plain","optional":true},"input_section":{"type":"string","description":"The filter section of logstash.conf","description_kind":"plain","required":true},"pattern_section":{"type":"string","description":"The list of customs Grok patterns","description_kind":"plain","optional":true}},"description":"Logstash configuration","description_kind":"plain"},"max_items":1}},"description":"Input configuration","description_kind":"plain"},"min_items":1,"max_items":1}},"description_kind":"plain"}},"ovh_dbaas_logs_output_graylog_stream":{"version":0,"block":{"attributes":{"can_alert":{"type":"bool","description":"Indicates if the current user can create alert on the stream","description_kind":"plain","computed":true},"cold_storage_compression":{"type":"string","description":"Cold storage compression method","description_kind":"plain","optional":true,"computed":true},"cold_storage_content":{"type":"string","description":"ColdStorage content","description_kind":"plain","optional":true,"computed":true},"cold_storage_enabled":{"type":"bool","description":"Is Cold storage enabled?","description_kind":"plain","optional":true,"computed":true},"cold_storage_notify_enabled":{"type":"bool","description":"Notify on new Cold storage archive","description_kind":"plain","optional":true,"computed":true},"cold_storage_retention":{"type":"number","description":"Cold storage retention in year","description_kind":"plain","optional":true,"computed":true},"cold_storage_target":{"type":"string","description":"ColdStorage destination","description_kind":"plain","optional":true,"computed":true},"created_at":{"type":"string","description":"Stream creation","description_kind":"plain","computed":true},"description":{"type":"string","description":"Stream description","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"indexing_enabled":{"type":"bool","description":"Enable ES indexing","description_kind":"plain","optional":true,"computed":true},"indexing_max_size":{"type":"number","description":"Maximum indexing size (in GB)","description_kind":"plain","optional":true,"computed":true},"indexing_notify_enabled":{"type":"bool","description":"If set, notify when size is near 80, 90 or 100 % of the maximum configured setting","description_kind":"plain","optional":true,"computed":true},"is_editable":{"type":"bool","description":"Indicates if you are allowed to edit entry","description_kind":"plain","computed":true},"is_shareable":{"type":"bool","description":"Indicates if you are allowed to share entry","description_kind":"plain","computed":true},"nb_alert_condition":{"type":"number","description":"Number of alert condition","description_kind":"plain","computed":true},"nb_archive":{"type":"number","description":"Number of coldstored archives","description_kind":"plain","computed":true},"parent_stream_id":{"type":"string","description":"Parent stream ID","description_kind":"plain","optional":true},"pause_indexing_on_max_size":{"type":"bool","description":"If set, pause indexing when maximum size is reach","description_kind":"plain","optional":true,"computed":true},"retention_id":{"type":"string","description":"Retention ID","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"The service name","description_kind":"plain","required":true},"stream_id":{"type":"string","description":"Stream ID","description_kind":"plain","computed":true},"title":{"type":"string","description":"Stream description","description_kind":"plain","required":true},"updated_at":{"type":"string","description":"Stream last update","description_kind":"plain","computed":true},"web_socket_enabled":{"type":"bool","description":"Enable Websocket","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"ovh_dedicated_ceph_acl":{"version":0,"block":{"attributes":{"family":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"netmask":{"type":"string","description_kind":"plain","required":true},"network":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_dedicated_nasha_partition":{"version":0,"block":{"attributes":{"capacity":{"type":"number","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description_kind":"plain","required":true},"protocol":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"size":{"type":"number","description_kind":"plain","required":true},"used_by_snapshots":{"type":"number","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_dedicated_nasha_partition_access":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip":{"type":"string","description_kind":"plain","required":true},"partition_name":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"type":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"ovh_dedicated_nasha_partition_snapshot":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"partition_name":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"type":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_dedicated_server_install_task":{"version":0,"block":{"attributes":{"bootid_on_destroy":{"type":"number","description":"If set, reboot the server on the specified boot id during destroy phase","description_kind":"plain","optional":true},"comment":{"type":"string","description":"Details of this task","description_kind":"plain","computed":true},"done_date":{"type":"string","description":"Completion date","description_kind":"plain","computed":true},"function":{"type":"string","description":"Function name","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"last_update":{"type":"string","description":"Last update","description_kind":"plain","computed":true},"partition_scheme_name":{"type":"string","description":"Partition scheme name.","description_kind":"plain","optional":true},"service_name":{"type":"string","description":"The internal name of your dedicated server.","description_kind":"plain","required":true},"start_date":{"type":"string","description":"Task Creation date","description_kind":"plain","computed":true},"status":{"type":"string","description":"Task status","description_kind":"plain","computed":true},"template_name":{"type":"string","description":"Template name","description_kind":"plain","required":true}},"block_types":{"details":{"nesting_mode":"list","block":{"attributes":{"change_log":{"type":"string","description":"Template change log details","description_kind":"plain","deprecated":true,"optional":true},"custom_hostname":{"type":"string","description":"Set up the server using the provided hostname instead of the default hostname","description_kind":"plain","optional":true},"disk_group_id":{"type":"number","description_kind":"plain","optional":true},"install_rtm":{"type":"bool","description_kind":"plain","optional":true},"install_sql_server":{"type":"bool","description_kind":"plain","optional":true},"language":{"type":"string","description":"language","description_kind":"plain","optional":true},"no_raid":{"type":"bool","description_kind":"plain","optional":true},"post_installation_script_link":{"type":"string","description":"Indicate the URL where your postinstall customisation script is located","description_kind":"plain","optional":true},"post_installation_script_return":{"type":"string","description":"indicate the string returned by your postinstall customisation script on successful execution. Advice: your script should return a unique validation string in case of succes. A good example is 'loh1Xee7eo OK OK OK UGh8Ang1Gu'","description_kind":"plain","optional":true},"reset_hw_raid":{"type":"bool","description_kind":"plain","optional":true},"soft_raid_devices":{"type":"number","description_kind":"plain","optional":true},"ssh_key_name":{"type":"string","description":"Name of the ssh key that should be installed. Password login will be disabled","description_kind":"plain","optional":true},"use_distrib_kernel":{"type":"bool","description":"Use the distribution's native kernel instead of the recommended OVH Kernel","description_kind":"plain","optional":true},"use_spla":{"type":"bool","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_dedicated_server_networking":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Operation description","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"The internal name of your dedicated server.","description_kind":"plain","required":true},"status":{"type":"string","description":"Operation status","description_kind":"plain","computed":true}},"block_types":{"interfaces":{"nesting_mode":"set","block":{"attributes":{"macs":{"type":["set","string"],"description":"Interface Mac address","description_kind":"plain","required":true},"type":{"type":"string","description":"Interface type","description_kind":"plain","required":true}},"description":"Interface or interfaces aggregation.","description_kind":"plain"},"min_items":1,"max_items":2},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"ovh_dedicated_server_reboot_task":{"version":0,"block":{"attributes":{"comment":{"type":"string","description":"Details of this task","description_kind":"plain","computed":true},"done_date":{"type":"string","description":"Completion date","description_kind":"plain","computed":true},"function":{"type":"string","description":"Function name","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"keepers":{"type":["list","string"],"description":"Change this value to recreate a reboot task.","description_kind":"plain","required":true},"last_update":{"type":"string","description":"Last update","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The internal name of your dedicated server.","description_kind":"plain","required":true},"start_date":{"type":"string","description":"Task Creation date","description_kind":"plain","computed":true},"status":{"type":"string","description":"Task status","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_dedicated_server_update":{"version":0,"block":{"attributes":{"boot_id":{"type":"number","description":"The boot id of your dedicated server.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"monitoring":{"type":"bool","description":"Icmp monitoring state","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"The internal name of your dedicated server.","description_kind":"plain","required":true},"state":{"type":"string","description":"error, hacked, hackedBlocked, ok","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"ovh_domain_zone":{"version":0,"block":{"attributes":{"dnssec_supported":{"type":"bool","description":"Is DNSSEC supported by this zone","description_kind":"plain","computed":true},"has_dns_anycast":{"type":"bool","description":"hasDnsAnycast flag of the DNS zone","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"last_update":{"type":"string","description":"Last update date of the DNS zone","description_kind":"plain","computed":true},"name":{"type":"string","description":"Zone name","description_kind":"plain","computed":true},"name_servers":{"type":["list","string"],"description":"Name servers that host the DNS zone","description_kind":"plain","computed":true},"order":{"type":["list",["object",{"date":"string","details":["list",["object",{"description":"string","domain":"string","order_detail_id":"number","quantity":"string"}]],"expiration_date":"string","order_id":"number"}]],"description":"Details about an Order","description_kind":"plain","computed":true},"ovh_subsidiary":{"type":"string","description":"Ovh Subsidiary","description_kind":"plain","required":true},"payment_mean":{"type":"string","description":"Ovh payment mode","description_kind":"plain","deprecated":true,"optional":true},"urn":{"type":"string","description_kind":"plain","computed":true}},"block_types":{"plan":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"},"min_items":1,"max_items":1},"plan_option":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"}}},"description_kind":"plain"}},"ovh_domain_zone_record":{"version":0,"block":{"attributes":{"fieldtype":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"subdomain":{"type":"string","description_kind":"plain","optional":true},"target":{"type":"string","description_kind":"plain","required":true},"ttl":{"type":"number","description_kind":"plain","optional":true},"zone":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_domain_zone_redirection":{"version":0,"block":{"attributes":{"description":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"keywords":{"type":"string","description_kind":"plain","optional":true},"subdomain":{"type":"string","description_kind":"plain","optional":true},"target":{"type":"string","description_kind":"plain","required":true},"title":{"type":"string","description_kind":"plain","optional":true},"type":{"type":"string","description_kind":"plain","required":true},"zone":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_hosting_privatedatabase":{"version":0,"block":{"attributes":{"cpu":{"type":"number","description":"Number of CPU on your private database","description_kind":"plain","computed":true},"datacenter":{"type":"string","description":"Datacenter where this private database is located","description_kind":"plain","computed":true},"display_name":{"type":"string","description":"Name displayed in customer panel for your private database","description_kind":"plain","optional":true,"computed":true},"hostname":{"type":"string","description":"Private database hostname","description_kind":"plain","computed":true},"hostname_ftp":{"type":"string","description":"Private database FTP hostname","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"infrastructure":{"type":"string","description":"Infrastructure where service was stored","description_kind":"plain","computed":true},"offer":{"type":"string","description":"Type of the private database offer","description_kind":"plain","computed":true},"order":{"type":["list",["object",{"date":"string","details":["list",["object",{"description":"string","domain":"string","order_detail_id":"number","quantity":"string"}]],"expiration_date":"string","order_id":"number"}]],"description":"Details about an Order","description_kind":"plain","computed":true},"ovh_subsidiary":{"type":"string","description":"Ovh Subsidiary","description_kind":"plain","required":true},"payment_mean":{"type":"string","description":"Ovh payment mode","description_kind":"plain","deprecated":true,"optional":true},"port":{"type":"number","description":"Private database service port","description_kind":"plain","computed":true},"port_ftp":{"type":"number","description":"Private database FTP port","description_kind":"plain","computed":true},"quota_size":{"type":"number","description":"Space allowed (in MB) on your private database","description_kind":"plain","computed":true},"quota_used":{"type":"number","description":"Sapce used (in MB) on your private database","description_kind":"plain","computed":true},"ram":{"type":"number","description":"Amount of ram (in MB) on your private database","description_kind":"plain","computed":true},"server":{"type":"string","description":"Private database server name","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","optional":true,"computed":true},"state":{"type":"string","description":"Private database state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Private database type","description_kind":"plain","computed":true},"urn":{"type":"string","description_kind":"plain","computed":true},"version":{"type":"string","description":"Private database available versions","description_kind":"plain","computed":true},"version_label":{"type":"string","description":"Private database version label","description_kind":"plain","computed":true},"version_number":{"type":"number","description":"Private database version number","description_kind":"plain","computed":true}},"block_types":{"plan":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"},"min_items":1,"max_items":1},"plan_option":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"}}},"description_kind":"plain"}},"ovh_hosting_privatedatabase_database":{"version":0,"block":{"attributes":{"database_name":{"type":"string","description":"Name of your new database","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"The internal name of your private database","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_hosting_privatedatabase_user":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"password":{"type":"string","description":"Password for the new user ( alphanumeric and 8 characters minimum )","description_kind":"plain","required":true,"sensitive":true},"service_name":{"type":"string","description":"The internal name of your private database","description_kind":"plain","required":true},"user_name":{"type":"string","description":"User name used to connect on your databases","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_hosting_privatedatabase_user_grant":{"version":0,"block":{"attributes":{"database_name":{"type":"string","description":"Database name where add grant","description_kind":"plain","required":true},"grant":{"type":"string","description":"Database name where add grant","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"The internal name of your private database","description_kind":"plain","required":true},"user_name":{"type":"string","description":"User name used to connect on your databases","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_hosting_privatedatabase_whitelist":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip":{"type":"string","description":"The whitelisted IP in your instance","description_kind":"plain","required":true},"name":{"type":"string","description":"Custom name for your Whitelisted IP","description_kind":"plain","required":true},"service":{"type":"bool","description":"Authorize this IP to access service port","description_kind":"plain","required":true},"service_name":{"type":"string","description":"The internal name of your private database","description_kind":"plain","required":true},"sftp":{"type":"bool","description":"Authorize this IP to access SFTP port","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_iam_policy":{"version":0,"block":{"attributes":{"allow":{"type":["set","string"],"description_kind":"plain","optional":true},"created_at":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","optional":true},"except":{"type":["set","string"],"description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"identities":{"type":["set","string"],"description_kind":"plain","required":true},"name":{"type":"string","description_kind":"plain","required":true},"owner":{"type":"string","description_kind":"plain","computed":true},"read_only":{"type":"bool","description_kind":"plain","computed":true},"resources":{"type":["set","string"],"description_kind":"plain","required":true},"updated_at":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_ip_reverse":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip":{"type":"string","description_kind":"plain","required":true},"ip_reverse":{"type":"string","description_kind":"plain","required":true},"reverse":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_ip_service":{"version":0,"block":{"attributes":{"can_be_terminated":{"type":"bool","description_kind":"plain","computed":true},"country":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description":"Custom description on your ip","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip":{"type":"string","description_kind":"plain","computed":true},"order":{"type":["list",["object",{"date":"string","details":["list",["object",{"description":"string","domain":"string","order_detail_id":"number","quantity":"string"}]],"expiration_date":"string","order_id":"number"}]],"description":"Details about an Order","description_kind":"plain","computed":true},"organisation_id":{"type":"string","description_kind":"plain","computed":true},"ovh_subsidiary":{"type":"string","description":"Ovh Subsidiary","description_kind":"plain","required":true},"payment_mean":{"type":"string","description":"Ovh payment mode","description_kind":"plain","deprecated":true,"optional":true},"routed_to":{"type":["list",["object",{"service_name":"string"}]],"description":"Routage information","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","computed":true},"type":{"type":"string","description":"Possible values for ip type","description_kind":"plain","computed":true}},"block_types":{"plan":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"},"min_items":1,"max_items":1},"plan_option":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"}}},"description_kind":"plain"}},"ovh_iploadbalancing":{"version":0,"block":{"attributes":{"display_name":{"type":"string","description":"Set the name displayed in ManagerV6 for your iplb (max 50 chars)","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_loadbalancing":{"type":"string","description":"Your IP load balancing","description_kind":"plain","computed":true},"ipv4":{"type":"string","description":"The IPV4 associated to your IP load balancing","description_kind":"plain","computed":true},"ipv6":{"type":"string","description":"The IPV6 associated to your IP load balancing. DEPRECATED.","description_kind":"plain","computed":true},"metrics_token":{"type":"string","description":"The metrics token associated with your IP load balancing","description_kind":"plain","computed":true,"sensitive":true},"offer":{"type":"string","description":"The offer of your IP load balancing","description_kind":"plain","computed":true},"order":{"type":["list",["object",{"date":"string","details":["list",["object",{"description":"string","domain":"string","order_detail_id":"number","quantity":"string"}]],"expiration_date":"string","order_id":"number"}]],"description":"Details about an Order","description_kind":"plain","computed":true},"orderable_zone":{"type":["set",["object",{"name":"string","plan_code":"string"}]],"description":"Available additional zone for your Load Balancer","description_kind":"plain","computed":true},"ovh_subsidiary":{"type":"string","description":"Ovh Subsidiary","description_kind":"plain","required":true},"payment_mean":{"type":"string","description":"Ovh payment mode","description_kind":"plain","deprecated":true,"optional":true},"service_name":{"type":"string","description":"The internal name of your IP load balancing","description_kind":"plain","computed":true},"ssl_configuration":{"type":"string","description":"Modern oldest compatible clients : Firefox 27, Chrome 30, IE 11 on Windows 7, Edge, Opera 17, Safari 9, Android 5.0, and Java 8. Intermediate oldest compatible clients : Firefox 1, Chrome 1, IE 7, Opera 5, Safari 1, Windows XP IE8, Android 2.3, Java 7. Intermediate if null.","description_kind":"plain","optional":true,"computed":true},"state":{"type":"string","description":"Current state of your IP","description_kind":"plain","computed":true},"urn":{"type":"string","description_kind":"plain","computed":true},"vrack_eligibility":{"type":"bool","description":"Vrack eligibility","description_kind":"plain","computed":true},"vrack_name":{"type":"string","description":"Name of the vRack on which the current Load Balancer is attached to, as it is named on vRack product","description_kind":"plain","computed":true},"zone":{"type":["list","string"],"description":"Location where your service is","description_kind":"plain","computed":true}},"block_types":{"plan":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"},"min_items":1,"max_items":1},"plan_option":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"}}},"description_kind":"plain"}},"ovh_iploadbalancing_http_farm":{"version":0,"block":{"attributes":{"balance":{"type":"string","description_kind":"plain","optional":true},"display_name":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"port":{"type":"number","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"stickiness":{"type":"string","description_kind":"plain","optional":true},"vrack_network_id":{"type":"number","description_kind":"plain","optional":true},"zone":{"type":"string","description_kind":"plain","required":true}},"block_types":{"probe":{"nesting_mode":"list","block":{"attributes":{"force_ssl":{"type":"bool","description_kind":"plain","optional":true},"interval":{"type":"number","description_kind":"plain","optional":true},"match":{"type":"string","description_kind":"plain","optional":true,"computed":true},"method":{"type":"string","description_kind":"plain","optional":true,"computed":true},"negate":{"type":"bool","description_kind":"plain","optional":true},"pattern":{"type":"string","description_kind":"plain","optional":true,"computed":true},"port":{"type":"number","description_kind":"plain","optional":true,"computed":true},"type":{"type":"string","description_kind":"plain","required":true},"url":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"ovh_iploadbalancing_http_farm_server":{"version":0,"block":{"attributes":{"address":{"type":"string","description_kind":"plain","required":true},"backup":{"type":"bool","description_kind":"plain","optional":true},"chain":{"type":"string","description_kind":"plain","optional":true},"cookie":{"type":"string","description_kind":"plain","computed":true},"display_name":{"type":"string","description_kind":"plain","optional":true},"farm_id":{"type":"number","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"on_marked_down":{"type":"string","description_kind":"plain","optional":true},"port":{"type":"number","description_kind":"plain","optional":true},"probe":{"type":"bool","description_kind":"plain","optional":true},"proxy_protocol_version":{"type":"string","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"ssl":{"type":"bool","description_kind":"plain","optional":true},"status":{"type":"string","description_kind":"plain","required":true},"weight":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"}},"ovh_iploadbalancing_http_frontend":{"version":0,"block":{"attributes":{"allowed_source":{"type":["list","string"],"description_kind":"plain","optional":true},"dedicated_ipfo":{"type":["set","string"],"description_kind":"plain","optional":true},"default_farm_id":{"type":"number","description_kind":"plain","optional":true,"computed":true},"default_ssl_id":{"type":"number","description_kind":"plain","optional":true,"computed":true},"disabled":{"type":"bool","description_kind":"plain","optional":true},"display_name":{"type":"string","description_kind":"plain","optional":true},"hsts":{"type":"bool","description_kind":"plain","optional":true},"http_header":{"type":["list","string"],"description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"port":{"type":"string","description_kind":"plain","required":true},"redirect_location":{"type":"string","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"ssl":{"type":"bool","description_kind":"plain","optional":true},"zone":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_iploadbalancing_http_route":{"version":0,"block":{"attributes":{"display_name":{"type":"string","description":"Human readable name for your route, this field is for you","description_kind":"plain","optional":true},"frontend_id":{"type":"number","description":"Route traffic for this frontend","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"rules":{"type":["list",["object",{"field":"string","match":"string","negate":"bool","pattern":"string","rule_id":"number","sub_field":"string"}]],"description":"List of rules to match to trigger action","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The internal name of your IP load balancing","description_kind":"plain","required":true},"status":{"type":"string","description":"Route status. Routes in \"ok\" state are ready to operate","description_kind":"plain","computed":true},"weight":{"type":"number","description":"Route priority ([0..255]). 0 if null. Highest priority routes are evaluated last. Only the first matching route will trigger an action","description_kind":"plain","optional":true,"computed":true}},"block_types":{"action":{"nesting_mode":"list","block":{"attributes":{"status":{"type":"number","description":"HTTP status code for \"redirect\" and \"reject\" actions","description_kind":"plain","optional":true},"target":{"type":"string","description":"Farm ID for \"farm\" action type or URL template for \"redirect\" action. You may use ${uri}, ${protocol}, ${host}, ${port} and ${path} variables in redirect target","description_kind":"plain","optional":true},"type":{"type":"string","description":"Action to trigger if all the rules of this route matches","description_kind":"plain","required":true}},"description":"Action triggered when all rules match","description_kind":"plain"},"min_items":1,"max_items":1}},"description_kind":"plain"}},"ovh_iploadbalancing_http_route_rule":{"version":0,"block":{"attributes":{"display_name":{"type":"string","description_kind":"plain","optional":true},"field":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"match":{"type":"string","description_kind":"plain","required":true},"negate":{"type":"bool","description_kind":"plain","optional":true,"computed":true},"pattern":{"type":"string","description_kind":"plain","optional":true},"route_id":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"sub_field":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"ovh_iploadbalancing_refresh":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"keepers":{"type":["list","string"],"description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_iploadbalancing_tcp_farm":{"version":0,"block":{"attributes":{"balance":{"type":"string","description_kind":"plain","optional":true},"display_name":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"port":{"type":"number","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"stickiness":{"type":"string","description_kind":"plain","optional":true},"vrack_network_id":{"type":"number","description_kind":"plain","optional":true},"zone":{"type":"string","description_kind":"plain","required":true}},"block_types":{"probe":{"nesting_mode":"list","block":{"attributes":{"force_ssl":{"type":"bool","description_kind":"plain","optional":true},"interval":{"type":"number","description_kind":"plain","optional":true},"match":{"type":"string","description_kind":"plain","optional":true,"computed":true},"method":{"type":"string","description_kind":"plain","optional":true},"negate":{"type":"bool","description_kind":"plain","optional":true},"pattern":{"type":"string","description_kind":"plain","optional":true},"port":{"type":"number","description_kind":"plain","optional":true},"type":{"type":"string","description_kind":"plain","required":true},"url":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"ovh_iploadbalancing_tcp_farm_server":{"version":0,"block":{"attributes":{"address":{"type":"string","description_kind":"plain","required":true},"backup":{"type":"bool","description_kind":"plain","optional":true},"chain":{"type":"string","description_kind":"plain","optional":true},"display_name":{"type":"string","description_kind":"plain","optional":true},"farm_id":{"type":"number","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"on_marked_down":{"type":"string","description_kind":"plain","optional":true},"port":{"type":"number","description_kind":"plain","optional":true},"probe":{"type":"bool","description_kind":"plain","optional":true},"proxy_protocol_version":{"type":"string","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"ssl":{"type":"bool","description_kind":"plain","optional":true},"status":{"type":"string","description_kind":"plain","required":true},"weight":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"}},"ovh_iploadbalancing_tcp_frontend":{"version":0,"block":{"attributes":{"allowed_source":{"type":["list","string"],"description_kind":"plain","optional":true},"dedicated_ipfo":{"type":["list","string"],"description_kind":"plain","optional":true},"default_farm_id":{"type":"number","description_kind":"plain","optional":true,"computed":true},"default_ssl_id":{"type":"number","description_kind":"plain","optional":true,"computed":true},"disabled":{"type":"bool","description_kind":"plain","optional":true},"display_name":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"port":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"ssl":{"type":"bool","description_kind":"plain","optional":true},"zone":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_iploadbalancing_tcp_route":{"version":0,"block":{"attributes":{"display_name":{"type":"string","description":"Human readable name for your route, this field is for you","description_kind":"plain","optional":true},"frontend_id":{"type":"number","description":"Route traffic for this frontend","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"rules":{"type":["list",["object",{"field":"string","match":"string","negate":"bool","pattern":"string","rule_id":"number","sub_field":"string"}]],"description":"List of rules to match to trigger action","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The internal name of your IP load balancing","description_kind":"plain","required":true},"status":{"type":"string","description":"Route status. Routes in \"ok\" state are ready to operate","description_kind":"plain","computed":true},"weight":{"type":"number","description":"Route priority ([0..255]). 0 if null. Highest priority routes are evaluated last. Only the first matching route will trigger an action","description_kind":"plain","optional":true,"computed":true}},"block_types":{"action":{"nesting_mode":"list","block":{"attributes":{"target":{"type":"string","description":"Farm ID for \"farm\" action type, empty for others","description_kind":"plain","optional":true},"type":{"type":"string","description":"Action to trigger if all the rules of this route matches","description_kind":"plain","required":true}},"description":"Action triggered when all rules match","description_kind":"plain"},"min_items":1,"max_items":1}},"description_kind":"plain"}},"ovh_iploadbalancing_tcp_route_rule":{"version":0,"block":{"attributes":{"display_name":{"type":"string","description_kind":"plain","optional":true},"field":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"match":{"type":"string","description_kind":"plain","required":true},"negate":{"type":"bool","description_kind":"plain","optional":true,"computed":true},"pattern":{"type":"string","description_kind":"plain","optional":true},"route_id":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"sub_field":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"ovh_iploadbalancing_vrack_network":{"version":0,"block":{"attributes":{"display_name":{"type":"string","description":"Human readable name for your vrack network","description_kind":"plain","optional":true},"farm_id":{"type":["list","number"],"description":"This attribute is there for documentation purpose only and isnt passed to the OVH API as it may conflicts with http/tcp farms `vrack_network_id` attribute","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"nat_ip":{"type":"string","description":"An IP block used as a pool of IPs by this Load Balancer to connect to the servers in this private network. The blck must be in the private network and reserved for the Load Balancer","description_kind":"plain","required":true},"service_name":{"type":"string","description":"The internal name of your IPloadbalancer","description_kind":"plain","required":true},"subnet":{"type":"string","description":"IP block of the private network in the vRack","description_kind":"plain","required":true},"vlan":{"type":"number","description":"VLAN of the private network in the vRack. 0 if the private network is not in a VLAN","description_kind":"plain","optional":true,"computed":true},"vrack_network_id":{"type":"number","description":"Internal Load Balancer identifier of the vRack private network","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_me_identity_group":{"version":0,"block":{"attributes":{"creation":{"type":"string","description_kind":"plain","computed":true},"default_group":{"type":"bool","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"last_update":{"type":"string","description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","required":true},"role":{"type":"string","description_kind":"plain","optional":true},"urn":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_me_identity_user":{"version":0,"block":{"attributes":{"creation":{"type":"string","description":"Creation date of this user","description_kind":"plain","computed":true},"description":{"type":"string","description":"User description","description_kind":"plain","optional":true},"email":{"type":"string","description":"User's email","description_kind":"plain","required":true},"group":{"type":"string","description":"User's group","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"last_update":{"type":"string","description":"Last update of this user","description_kind":"plain","computed":true},"login":{"type":"string","description":"User's login suffix","description_kind":"plain","required":true},"password":{"type":"string","description":"User's password","description_kind":"plain","required":true,"sensitive":true},"password_last_update":{"type":"string","description":"When the user changed his password for the last time","description_kind":"plain","computed":true},"status":{"type":"string","description":"Current user's status","description_kind":"plain","computed":true},"urn":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_me_installation_template":{"version":0,"block":{"attributes":{"available_languages":{"type":["list","string"],"description":"List of all language available for this template","description_kind":"plain","computed":true},"base_template_name":{"type":"string","description":"OVH template name yours will be based on, choose one among the list given by compatibleTemplates function","description_kind":"plain","required":true},"beta":{"type":"bool","description":"This distribution is new and, although tested and functional, may still display odd behaviour","description_kind":"plain","computed":true},"bit_format":{"type":"number","description":"This template bit format (32 or 64)","description_kind":"plain","computed":true},"category":{"type":"string","description":"Category of this template (informative only). (basic, customer, hosting, other, readyToUse, virtualisation)","description_kind":"plain","computed":true},"default_language":{"type":"string","description":"The default language of this template","description_kind":"plain","required":true},"deprecated":{"type":"bool","description":"is this distribution deprecated","description_kind":"plain","computed":true},"description":{"type":"string","description":"information about this template","description_kind":"plain","computed":true},"distribution":{"type":"string","description":"the distribution this template is based on","description_kind":"plain","computed":true},"family":{"type":"string","description":"this template family type (bsd,linux,solaris,windows)","description_kind":"plain","computed":true},"filesystems":{"type":["list","string"],"description":"Filesystems available (btrfs,ext3,ext4,ntfs,reiserfs,swap,ufs,xfs,zfs)","description_kind":"plain","computed":true},"hard_raid_configuration":{"type":"bool","description":"This distribution supports hardware raid configuration through the OVH API","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"last_modification":{"type":"string","description":"Date of last modification of the base image","description_kind":"plain","computed":true},"lvm_ready":{"type":"bool","description":"This distribution supports Logical Volumes (Linux LVM)","description_kind":"plain","computed":true},"remove_default_partition_schemes":{"type":"bool","description":"Remove default partition schemes at creation","description_kind":"plain","optional":true,"computed":true},"supports_distribution_kernel":{"type":"bool","description":"This distribution supports installation using the distribution's native kernel instead of the recommended OVH kernel","description_kind":"plain","computed":true},"supports_rtm":{"type":"bool","description":"This distribution supports RTM software","description_kind":"plain","computed":true},"supports_sql_server":{"type":"bool","description":"This distribution supports the microsoft SQL server","description_kind":"plain","computed":true},"template_name":{"type":"string","description":"This template name","description_kind":"plain","required":true}},"block_types":{"customization":{"nesting_mode":"list","block":{"attributes":{"change_log":{"type":"string","description":"Template change log details","description_kind":"plain","deprecated":true,"optional":true},"custom_hostname":{"type":"string","description":"Set up the server using the provided hostname instead of the default hostname","description_kind":"plain","optional":true},"post_installation_script_link":{"type":"string","description":"Indicate the URL where your postinstall customisation script is located","description_kind":"plain","optional":true},"post_installation_script_return":{"type":"string","description":"indicate the string returned by your postinstall customisation script on successful execution. Advice: your script should return a unique validation string in case of succes. A good example is 'loh1Xee7eo OK OK OK UGh8Ang1Gu'","description_kind":"plain","optional":true},"rating":{"type":"number","description_kind":"plain","deprecated":true,"optional":true},"ssh_key_name":{"type":"string","description":"Name of the ssh key that should be installed. Password login will be disabled","description_kind":"plain","optional":true},"use_distribution_kernel":{"type":"bool","description":"Use the distribution's native kernel instead of the recommended OVH Kernel","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"ovh_me_installation_template_partition_scheme":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"name of this partitioning scheme","description_kind":"plain","required":true},"priority":{"type":"number","description":"on a reinstall, if a partitioning scheme is not specified, the one with the higher priority will be used by default, among all the compatible partitioning schemes (given the underlying hardware specifications)","description_kind":"plain","required":true},"template_name":{"type":"string","description":"This template name","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_me_installation_template_partition_scheme_hardware_raid":{"version":0,"block":{"attributes":{"disks":{"type":["list","string"],"description":"Disk List. Syntax is cX:dY for disks and [cX:dY,cX:dY] for groups. With X and Y resp. the controller id and the disk id","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"mode":{"type":"string","description":"RAID mode (raid0, raid1, raid10, raid5, raid50, raid6, raid60)","description_kind":"plain","required":true},"name":{"type":"string","description":"Hardware RAID name","description_kind":"plain","required":true},"scheme_name":{"type":"string","description":"name of this partitioning scheme","description_kind":"plain","required":true},"step":{"type":"number","description":"Specifies the creation order of the hardware RAID","description_kind":"plain","required":true},"template_name":{"type":"string","description":"Template name","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_me_installation_template_partition_scheme_partition":{"version":0,"block":{"attributes":{"filesystem":{"type":"string","description":"Partition filesystem","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"mountpoint":{"type":"string","description":"partition mount point","description_kind":"plain","required":true},"order":{"type":"number","description":"step or order. specifies the creation order of the partition on the disk","description_kind":"plain","required":true},"raid":{"type":"string","description":"raid partition type","description_kind":"plain","optional":true,"computed":true},"scheme_name":{"type":"string","description":"name of this partitioning scheme","description_kind":"plain","required":true},"size":{"type":"number","description":"size of partition in MB, 0 =\u003e rest of the space","description_kind":"plain","required":true},"template_name":{"type":"string","description":"Template name","description_kind":"plain","required":true},"type":{"type":"string","description":"partition type","description_kind":"plain","required":true},"volume_name":{"type":"string","description":"The volume name needed for proxmox distribution","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"ovh_me_ipxe_script":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"For documentation purpose only. This attribute is not passed to the OVH API as it cannot be retrieved back. Instead a fake description ('$name auto description') is passed at creation time.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of your script","description_kind":"plain","required":true},"script":{"type":"string","description":"Content of your IPXE script","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_me_ssh_key":{"version":0,"block":{"attributes":{"default":{"type":"bool","description":"True when this public Ssh key is used for rescue mode and reinstallations","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"ASCII encoded public Ssh key","description_kind":"plain","required":true},"key_name":{"type":"string","description":"Name of this public Ssh key","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_vrack":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"yourvrackdescription","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"yourvrackname","description_kind":"plain","optional":true,"computed":true},"order":{"type":["list",["object",{"date":"string","details":["list",["object",{"description":"string","domain":"string","order_detail_id":"number","quantity":"string"}]],"expiration_date":"string","order_id":"number"}]],"description":"Details about an Order","description_kind":"plain","computed":true},"ovh_subsidiary":{"type":"string","description":"Ovh Subsidiary","description_kind":"plain","required":true},"payment_mean":{"type":"string","description":"Ovh payment mode","description_kind":"plain","deprecated":true,"optional":true},"service_name":{"type":"string","description":"The internal name of your vrack","description_kind":"plain","computed":true},"urn":{"type":"string","description_kind":"plain","computed":true}},"block_types":{"plan":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"},"min_items":1,"max_items":1},"plan_option":{"nesting_mode":"list","block":{"attributes":{"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"duration":{"type":"string","description":"duration","description_kind":"plain","required":true},"plan_code":{"type":"string","description":"Plan code","description_kind":"plain","required":true},"pricing_mode":{"type":"string","description":"Pricing model identifier","description_kind":"plain","required":true}},"block_types":{"configuration":{"nesting_mode":"list","block":{"attributes":{"label":{"type":"string","description":"Identifier of the resource","description_kind":"plain","required":true},"value":{"type":"string","description":"Path to the resource in API.OVH.COM","description_kind":"plain","required":true}},"description":"Representation of a configuration item for personalizing product","description_kind":"plain"}}},"description":"Product Plan to order","description_kind":"plain"}}},"description_kind":"plain"}},"ovh_vrack_cloudproject":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description_kind":"plain","optional":true},"service_name":{"type":"string","description":"Service name of the vrack resource.","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_vrack_dedicated_server":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"server_id":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description":"Service name of the resource representing the id of the cloud project.","description_kind":"plain","required":true}},"description_kind":"plain","deprecated":true}},"ovh_vrack_dedicated_server_interface":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"interface_id":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description":"Service name of the vrack resource.","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_vrack_ip":{"version":0,"block":{"attributes":{"block":{"type":"string","description":"Your IP block.","description_kind":"plain","required":true},"gateway":{"type":"string","description":"Your gateway","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip":{"type":"string","description":"Your IP block","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The internal name of your vrack","description_kind":"plain","required":true},"zone":{"type":"string","description":"Where you want your block announced on the network","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_vrack_iploadbalancing":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_loadbalancing":{"type":"string","description":"Your ipLoadbalancing","description_kind":"plain","required":true},"service_name":{"type":"string","description":"The internal name of your vrack","description_kind":"plain","required":true}},"description_kind":"plain"}}},"data_source_schemas":{"ovh_cloud_project_capabilities_containerregistry":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"result":{"type":["list",["object",{"plans":["list",["object",{"code":"string","created_at":"string","features":["list",["object",{"vulnerability":"bool"}]],"id":"string","name":"string","registry_limits":["list",["object",{"image_storage":"number","parallel_request":"number"}]],"updated_at":"string"}]],"region_name":"string"}]],"description":"List of container registry capability for a single region","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_capabilities_containerregistry_filter":{"version":0,"block":{"attributes":{"code":{"type":"string","description":"Plan code from catalog","description_kind":"plain","computed":true},"created_at":{"type":"string","description":"Plan creation date","description_kind":"plain","computed":true},"features":{"type":["list",["object",{"vulnerability":"bool"}]],"description":"Features of the plan","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Plan name","description_kind":"plain","computed":true},"plan_name":{"type":"string","description":"Plan name of the registry.","description_kind":"plain","required":true},"region":{"type":"string","description":"Region of the registry.","description_kind":"plain","required":true},"registry_limits":{"type":["list",["object",{"image_storage":"number","parallel_request":"number"}]],"description":"Container registry limits","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"updated_at":{"type":"string","description":"Plan last update date","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_containerregistries":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"result":{"type":["list",["object",{"created_at":"string","id":"string","name":"string","project_id":"string","region":"string","size":"number","status":"string","updated_at":"string","url":"string","version":"string"}]],"description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_containerregistry":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"Registry creation date","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Registry name","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"Project ID of your registry","description_kind":"plain","computed":true},"region":{"type":"string","description":"Region of the registry.","description_kind":"plain","computed":true},"registry_id":{"type":"string","description":"Registry ID","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"size":{"type":"number","description":"Current size of the registry (bytes)","description_kind":"plain","computed":true},"status":{"type":"string","description":"Registry status","description_kind":"plain","computed":true},"updated_at":{"type":"string","description":"Registry last update date","description_kind":"plain","computed":true},"url":{"type":"string","description":"Access url of the registry","description_kind":"plain","computed":true},"version":{"type":"string","description":"Version of your registry","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_containerregistry_oidc":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"oidc_admin_group":{"type":"string","description_kind":"plain","optional":true},"oidc_auto_onboard":{"type":"bool","description_kind":"plain","optional":true},"oidc_client_id":{"type":"string","description_kind":"plain","optional":true},"oidc_endpoint":{"type":"string","description_kind":"plain","optional":true},"oidc_groups_claim":{"type":"string","description_kind":"plain","optional":true},"oidc_name":{"type":"string","description_kind":"plain","optional":true},"oidc_scope":{"type":"string","description_kind":"plain","optional":true},"oidc_user_claim":{"type":"string","description_kind":"plain","optional":true},"oidc_verify_cert":{"type":"bool","description_kind":"plain","optional":true},"registry_id":{"type":"string","description":"Registry ID","description_kind":"plain","required":true},"service_name":{"type":"string","description":"Service name","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_containerregistry_users":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"registry_id":{"type":"string","description":"RegistryID","description_kind":"plain","required":true},"result":{"type":["list",["object",{"email":"string","id":"string","user":"string"}]],"description_kind":"plain","computed":true},"service_name":{"type":"string","description":"Service name","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database":{"version":0,"block":{"attributes":{"advanced_configuration":{"type":["map","string"],"description":"Advanced configuration key / value","description_kind":"plain","computed":true},"backup_time":{"type":"string","description":"Time on which backups start every day","description_kind":"plain","computed":true},"created_at":{"type":"string","description":"Date of the creation of the cluster","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description of the cluster","description_kind":"plain","computed":true},"disk_size":{"type":"number","description":"Disk size attributes of the cluster","description_kind":"plain","computed":true},"disk_type":{"type":"string","description":"Disk type attributes of the cluster","description_kind":"plain","computed":true},"endpoints":{"type":["list",["object",{"component":"string","domain":"string","path":"string","port":"number","scheme":"string","ssl":"bool","ssl_mode":"string","uri":"string"}]],"description":"List of all endpoints of the service","description_kind":"plain","computed":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"flavor":{"type":"string","description":"The node flavor used for this cluster","description_kind":"plain","computed":true},"id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"kafka_rest_api":{"type":"bool","description":"Defines whether the REST API is enabled on a Kafka cluster","description_kind":"plain","computed":true},"maintenance_time":{"type":"string","description":"Time on which maintenances can start every day","description_kind":"plain","computed":true},"network_type":{"type":"string","description":"Type of network of the cluster","description_kind":"plain","computed":true},"nodes":{"type":["list",["object",{"network_id":"string","region":"string","subnet_id":"string"}]],"description":"List of nodes composing the service","description_kind":"plain","computed":true},"opensearch_acls_enabled":{"type":"bool","description":"Defines whether the ACLs are enabled on an Opensearch cluster","description_kind":"plain","computed":true},"plan":{"type":"string","description":"Plan of the cluster","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the cluster","description_kind":"plain","computed":true},"version":{"type":"string","description":"Version of the engine deployed on the cluster","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_capabilities":{"version":0,"block":{"attributes":{"engines":{"type":["set",["object",{"default_version":"string","description":"string","name":"string","ssl_modes":["set","string"],"versions":["set","string"]}]],"description":"Database engines available","description_kind":"plain","computed":true},"flavors":{"type":["set",["object",{"core":"number","memory":"number","name":"string","storage":"number"}]],"description":"Flavors available","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"options":{"type":["set",["object",{"name":"string","type":"string"}]],"description":"Options available","description_kind":"plain","computed":true},"plans":{"type":["set",["object",{"backup_retention":"string","description":"string","name":"string"}]],"description":"Plans available","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_certificates":{"version":0,"block":{"attributes":{"ca":{"type":"string","description":"CA certificate used for the service","description_kind":"plain","computed":true},"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_database":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"default":{"type":"bool","description":"Defines if the database has been created by default","description_kind":"plain","computed":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the database","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_databases":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"database_ids":{"type":["list","string"],"description":"List of databases ids","description_kind":"plain","computed":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_integration":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"destination_service_id":{"type":"string","description":"ID of the destination service","description_kind":"plain","computed":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description":"Integration ID","description_kind":"plain","required":true},"parameters":{"type":["map","string"],"description":"Parameters for the integration","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"source_service_id":{"type":"string","description":"ID of the source service","description_kind":"plain","computed":true},"status":{"type":"string","description":"Current status of the integration","description_kind":"plain","computed":true},"type":{"type":"string","description":"Type of the integration","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_integrations":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"integration_ids":{"type":["list","string"],"description":"List of integrations ids","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_ip_restrictions":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ips":{"type":["list","string"],"description":"List of IP restriction","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_kafka_acl":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description":"Acl ID","description_kind":"plain","required":true},"permission":{"type":"string","description":"Permission to give to this username on this topic","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"topic":{"type":"string","description":"Topic affected by this acl","description_kind":"plain","computed":true},"username":{"type":"string","description":"Username affected by this acl","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_kafka_acls":{"version":0,"block":{"attributes":{"acl_ids":{"type":["list","string"],"description":"List of acl ids","description_kind":"plain","computed":true},"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_kafka_schemaregistryacl":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description":"Shema registry ACL ID","description_kind":"plain","required":true},"permission":{"type":"string","description":"Permission to give to this username on this resource","description_kind":"plain","computed":true},"resource":{"type":"string","description":"Resource affected by this ACL","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"username":{"type":"string","description":"Username affected by this ACL","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_kafka_schemaregistryacls":{"version":0,"block":{"attributes":{"acl_ids":{"type":["list","string"],"description":"List of schema registry acl ids","description_kind":"plain","computed":true},"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_kafka_topic":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description":"Topic ID","description_kind":"plain","required":true},"min_insync_replicas":{"type":"number","description":"Minimum insync replica accepted for this topic","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the topic","description_kind":"plain","computed":true},"partitions":{"type":"number","description":"Number of partitions for this topic","description_kind":"plain","computed":true},"replication":{"type":"number","description":"Number of replication for this topic","description_kind":"plain","computed":true},"retention_bytes":{"type":"number","description":"Number of bytes for the retention of the data for this topic","description_kind":"plain","computed":true},"retention_hours":{"type":"number","description":"Number of hours for the retention of the data for this topic","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_kafka_topics":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"topic_ids":{"type":["list","string"],"description":"List of topic ids","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_kafka_user_access":{"version":0,"block":{"attributes":{"cert":{"type":"string","description":"User cert","description_kind":"plain","computed":true},"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"User key for the cert","description_kind":"plain","computed":true,"sensitive":true},"service_name":{"type":"string","description_kind":"plain","required":true},"user_id":{"type":"string","description":"Id of the user","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_m3db_namespace":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the namespace","description_kind":"plain","required":true},"resolution":{"type":"string","description":"Resolution for an aggregated namespace","description_kind":"plain","computed":true},"retention_block_data_expiration_duration":{"type":"string","description":"Controls how long we wait before expiring stale data","description_kind":"plain","computed":true},"retention_block_size_duration":{"type":"string","description":"Controls how long to keep a block in memory before flushing to a fileset on disk","description_kind":"plain","computed":true},"retention_buffer_future_duration":{"type":"string","description":"Controls how far into the future writes to the namespace will be accepted","description_kind":"plain","computed":true},"retention_buffer_past_duration":{"type":"string","description":"Controls how far into the past writes to the namespace will be accepted","description_kind":"plain","computed":true},"retention_period_duration":{"type":"string","description":"Controls the duration of time that M3DB will retain data for the namespace","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"snapshot_enabled":{"type":"bool","description":"Defines whether M3DB will create snapshot files for this namespace","description_kind":"plain","computed":true},"type":{"type":"string","description":"Type of namespace","description_kind":"plain","computed":true},"writes_to_commit_log_enabled":{"type":"bool","description":"Defines whether M3DB will include writes to this namespace in the commit log","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_m3db_namespaces":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"namespace_ids":{"type":["list","string"],"description":"List of namespaces ids","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_m3db_user":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"group":{"type":"string","description":"Group of the user","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the user","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_mongodb_user":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the user with the authentication database in the format name@authDB","description_kind":"plain","required":true},"roles":{"type":["set","string"],"description":"Roles the user belongs to","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_opensearch_pattern":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description":"Pattern ID","description_kind":"plain","required":true},"max_index_count":{"type":"number","description":"Maximum number of index for this pattern","description_kind":"plain","computed":true},"pattern":{"type":"string","description":"Pattern format","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_opensearch_patterns":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"pattern_ids":{"type":["list","string"],"description":"List of pattern ids","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_database_opensearch_user":{"version":0,"block":{"attributes":{"acls":{"type":["set",["object",{"pattern":"string","permission":"string"}]],"description":"Acls of the user","description_kind":"plain","computed":true},"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the user","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_postgresql_user":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the user","description_kind":"plain","required":true},"roles":{"type":["set","string"],"description":"Roles the user belongs to","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_redis_user":{"version":0,"block":{"attributes":{"categories":{"type":["set","string"],"description":"Categories of the user","description_kind":"plain","computed":true},"channels":{"type":["set","string"],"description":"Channels of the user","description_kind":"plain","computed":true},"cluster_id":{"type":"string","description":"Id of the database cluster","description_kind":"plain","required":true},"commands":{"type":["set","string"],"description":"Commands of the user","description_kind":"plain","computed":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"keys":{"type":["set","string"],"description":"Keys of the user","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the user","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_user":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"created_at":{"type":"string","description":"Date of the creation of the user","description_kind":"plain","computed":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the user","description_kind":"plain","required":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description":"Current status of the user","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_database_users":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Cluster ID","description_kind":"plain","required":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"user_ids":{"type":["list","string"],"description":"List of users ids","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_databases":{"version":0,"block":{"attributes":{"cluster_ids":{"type":["list","string"],"description":"List of database clusters uuids","description_kind":"plain","computed":true},"engine":{"type":"string","description":"Name of the engine of the service","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_failover_ip_attach":{"version":0,"block":{"attributes":{"block":{"type":"string","description":"IP block","description_kind":"plain","optional":true,"computed":true},"continent_code":{"type":"string","description":"Ip continent","description_kind":"plain","optional":true,"computed":true},"geo_loc":{"type":"string","description":"Ip location","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"Ip id","description_kind":"plain","computed":true},"ip":{"type":"string","description":"Ip","description_kind":"plain","optional":true,"computed":true},"progress":{"type":"number","description":"Current operation progress in percent","description_kind":"plain","computed":true},"routed_to":{"type":"string","description":"Instance where ip is routed to","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"The service name","description_kind":"plain","required":true},"status":{"type":"string","description":"Ip status","description_kind":"plain","computed":true},"sub_type":{"type":"string","description":"IP sub type","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_kube":{"version":0,"block":{"attributes":{"control_plane_is_up_to_date":{"type":"bool","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_up_to_date":{"type":"bool","description_kind":"plain","computed":true},"kube_id":{"type":"string","description_kind":"plain","required":true},"kube_proxy_mode":{"type":"string","description_kind":"plain","optional":true},"name":{"type":"string","description_kind":"plain","optional":true},"next_upgrade_versions":{"type":["set","string"],"description_kind":"plain","computed":true},"nodes_url":{"type":"string","description_kind":"plain","computed":true},"private_network_id":{"type":"string","description_kind":"plain","computed":true},"region":{"type":"string","description_kind":"plain","optional":true},"service_name":{"type":"string","description_kind":"plain","required":true},"status":{"type":"string","description_kind":"plain","computed":true},"update_policy":{"type":"string","description_kind":"plain","optional":true},"url":{"type":"string","description_kind":"plain","computed":true},"version":{"type":"string","description_kind":"plain","optional":true}},"block_types":{"customization":{"nesting_mode":"set","block":{"block_types":{"apiserver":{"nesting_mode":"set","block":{"block_types":{"admissionplugins":{"nesting_mode":"set","block":{"attributes":{"disabled":{"type":["list","string"],"description_kind":"plain","optional":true,"computed":true},"enabled":{"type":["list","string"],"description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}}},"description_kind":"plain","deprecated":true}}},"description_kind":"plain","deprecated":true}},"customization_apiserver":{"nesting_mode":"set","block":{"block_types":{"admissionplugins":{"nesting_mode":"set","block":{"attributes":{"disabled":{"type":["list","string"],"description_kind":"plain","optional":true,"computed":true},"enabled":{"type":["list","string"],"description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"customization_kube_proxy":{"nesting_mode":"set","block":{"block_types":{"iptables":{"nesting_mode":"set","block":{"attributes":{"min_sync_period":{"type":"string","description_kind":"plain","optional":true},"sync_period":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"ipvs":{"nesting_mode":"set","block":{"attributes":{"min_sync_period":{"type":"string","description_kind":"plain","optional":true},"scheduler":{"type":"string","description_kind":"plain","optional":true},"sync_period":{"type":"string","description_kind":"plain","optional":true},"tcp_fin_timeout":{"type":"string","description_kind":"plain","optional":true},"tcp_timeout":{"type":"string","description_kind":"plain","optional":true},"udp_timeout":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"ovh_cloud_project_kube_iprestrictions":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ips":{"type":["set","string"],"description":"List of IP restrictions for the cluster","description_kind":"plain","computed":true},"kube_id":{"type":"string","description":"Kube ID","description_kind":"plain","required":true},"service_name":{"type":"string","description":"Service name","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_kube_nodepool":{"version":0,"block":{"attributes":{"anti_affinity":{"type":"bool","description":"Enable anti affinity groups for nodes in the pool","description_kind":"plain","computed":true},"autoscale":{"type":"bool","description":"Enable auto-scaling for the pool","description_kind":"plain","computed":true},"available_nodes":{"type":"number","description":"Number of nodes which are actually ready in the pool","description_kind":"plain","computed":true},"created_at":{"type":"string","description":"Creation date","description_kind":"plain","computed":true},"current_nodes":{"type":"number","description":"Number of nodes present in the pool","description_kind":"plain","computed":true},"desired_nodes":{"type":"number","description":"Number of nodes you desire in the pool","description_kind":"plain","computed":true},"flavor":{"type":"string","description":"Flavor name","description_kind":"plain","computed":true},"flavor_name":{"type":"string","description":"Flavor name","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kube_id":{"type":"string","description":"Kube ID","description_kind":"plain","required":true},"max_nodes":{"type":"number","description":"Number of nodes you desire in the pool","description_kind":"plain","computed":true},"min_nodes":{"type":"number","description":"Number of nodes you desire in the pool","description_kind":"plain","computed":true},"monthly_billed":{"type":"bool","description":"Enable monthly billing on all nodes in the pool","description_kind":"plain","computed":true},"name":{"type":"string","description":"NodePool resource name","description_kind":"plain","required":true},"project_id":{"type":"string","description":"Project id","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"Service name","description_kind":"plain","required":true},"size_status":{"type":"string","description":"Status describing the state between number of nodes wanted and available ones","description_kind":"plain","computed":true},"status":{"type":"string","description":"Current status","description_kind":"plain","computed":true},"up_to_date_nodes":{"type":"number","description":"Number of nodes with latest version installed in the pool","description_kind":"plain","computed":true},"updated_at":{"type":"string","description":"Last update date","description_kind":"plain","computed":true}},"block_types":{"template":{"nesting_mode":"set","block":{"block_types":{"metadata":{"nesting_mode":"set","block":{"attributes":{"annotations":{"type":["map","string"],"description":"annotations","description_kind":"plain","optional":true},"finalizers":{"type":["list","string"],"description":"finalizers","description_kind":"plain","optional":true},"labels":{"type":["map","string"],"description":"labels","description_kind":"plain","optional":true}},"description":"metadata","description_kind":"plain"},"max_items":1},"spec":{"nesting_mode":"set","block":{"attributes":{"taints":{"type":["list",["map","string"]],"description":"taints","description_kind":"plain","optional":true},"unschedulable":{"type":"bool","description":"unschedulable","description_kind":"plain","optional":true}},"description":"spec","description_kind":"plain"},"max_items":1}},"description":"Node pool template","description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"ovh_cloud_project_kube_nodepool_nodes":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kube_id":{"type":"string","description":"Kube ID","description_kind":"plain","required":true},"name":{"type":"string","description":"NodePool resource name","description_kind":"plain","required":true},"nodes":{"type":["list",["object",{"created_at":"string","deployed_at":"string","flavor":"string","id":"string","instance_id":"string","is_up_to_date":"bool","name":"string","node_pool_id":"string","project_id":"string","status":"string","updated_at":"string","version":"string"}]],"description":"Nodes composing the node pool","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"Service name","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_kube_nodes":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kube_id":{"type":"string","description":"Kube ID","description_kind":"plain","required":true},"nodes":{"type":["list",["object",{"created_at":"string","deployed_at":"string","flavor":"string","id":"string","instance_id":"string","is_up_to_date":"bool","name":"string","node_pool_id":"string","project_id":"string","status":"string","updated_at":"string","version":"string"}]],"description":"Nodes composing the cluster","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"Service name","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_kube_oidc":{"version":0,"block":{"attributes":{"client_id":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"issuer_url":{"type":"string","description_kind":"plain","optional":true},"kube_id":{"type":"string","description":"Kube ID","description_kind":"plain","required":true},"oidc_ca_content":{"type":"string","description_kind":"plain","optional":true},"oidc_groups_claim":{"type":["list","string"],"description_kind":"plain","optional":true},"oidc_groups_prefix":{"type":"string","description_kind":"plain","optional":true},"oidc_required_claim":{"type":["list","string"],"description_kind":"plain","optional":true},"oidc_signing_algs":{"type":["list","string"],"description_kind":"plain","optional":true},"oidc_username_claim":{"type":"string","description_kind":"plain","optional":true},"oidc_username_prefix":{"type":"string","description_kind":"plain","optional":true},"service_name":{"type":"string","description":"Service name","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_region":{"version":0,"block":{"attributes":{"continent_code":{"type":"string","description_kind":"plain","computed":true},"datacenter_location":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description_kind":"plain","required":true},"service_name":{"type":"string","description":"Service name of the resource representing the id of the cloud project.","description_kind":"plain","required":true},"services":{"type":["set",["object",{"name":"string","status":"string"}]],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_regions":{"version":0,"block":{"attributes":{"has_services_up":{"type":["list","string"],"description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"names":{"type":["set","string"],"description_kind":"plain","computed":true},"service_name":{"type":"string","description":"Service name of the resource representing the id of the cloud project.","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_user":{"version":0,"block":{"attributes":{"creation_date":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"roles":{"type":["list",["object",{"description":"string","id":"string","name":"string","permissions":["set","string"]}]],"description_kind":"plain","computed":true},"service_name":{"type":"string","description":"Service name of the resource representing the id of the cloud project.","description_kind":"plain","required":true},"status":{"type":"string","description_kind":"plain","computed":true},"user_id":{"type":"string","description":"The user ID","description_kind":"plain","required":true},"username":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_cloud_project_user_s3_credential":{"version":0,"block":{"attributes":{"access_key_id":{"type":"string","description":"The access key","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"secret_access_key":{"type":"string","description_kind":"plain","computed":true,"sensitive":true},"service_name":{"type":"string","description":"Service name of the resource representing the ID of the cloud project.","description_kind":"plain","required":true},"user_id":{"type":"string","description":"The user ID","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_user_s3_credentials":{"version":0,"block":{"attributes":{"access_key_ids":{"type":["list","string"],"description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"Service name of the resource representing the ID of the cloud project.","description_kind":"plain","required":true},"user_id":{"type":"string","description":"The user ID","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_user_s3_policy":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"policy":{"type":"string","description":"The policy document. This is a JSON formatted string.","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"Service name of the resource representing the ID of the cloud project.","description_kind":"plain","required":true},"user_id":{"type":"string","description":"The user ID","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_cloud_project_users":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"Service name of the resource representing the id of the cloud project.","description_kind":"plain","required":true},"users":{"type":["list",["object",{"creation_date":"string","description":"string","roles":["list",["object",{"description":"string","id":"string","name":"string","permissions":["set","string"]}]],"status":"string","user_id":"string","username":"string"}]],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_dbaas_logs_cluster":{"version":0,"block":{"attributes":{"archive_allowed_networks":{"type":["set","string"],"description":"Allowed networks for ARCHIVE flow type","description_kind":"plain","computed":true},"cluster_type":{"type":"string","description":"Cluster type","description_kind":"plain","computed":true},"dedicated_input_pem":{"type":"string","description":"PEM for dedicated inputs","description_kind":"plain","computed":true,"sensitive":true},"direct_input_allowed_networks":{"type":["set","string"],"description":"Allowed networks for DIRECT_INPUT flow type","description_kind":"plain","computed":true},"direct_input_pem":{"type":"string","description":"PEM for direct inputs","description_kind":"plain","computed":true,"sensitive":true},"hostname":{"type":"string","description":"hostname","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_default":{"type":"bool","description":"All content generated by given service will be placed on this cluster","description_kind":"plain","computed":true},"is_unlocked":{"type":"bool","description":"Allow given service to perform advanced operations on cluster","description_kind":"plain","computed":true},"query_allowed_networks":{"type":["set","string"],"description":"Allowed networks for QUERY flow type","description_kind":"plain","computed":true},"region":{"type":"string","description":"Data center localization","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The service name","description_kind":"plain","required":true},"urn":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_dbaas_logs_input_engine":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_deprecated":{"type":"bool","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"The service name","description_kind":"plain","required":true},"version":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"ovh_dbaas_logs_output_graylog_stream":{"version":0,"block":{"attributes":{"can_alert":{"type":"bool","description":"Indicates if the current user can create alert on the stream","description_kind":"plain","computed":true},"cold_storage_compression":{"type":"string","description":"Cold storage compression method","description_kind":"plain","computed":true},"cold_storage_content":{"type":"string","description":"ColdStorage content","description_kind":"plain","computed":true},"cold_storage_enabled":{"type":"bool","description":"Is Cold storage enabled?","description_kind":"plain","computed":true},"cold_storage_notify_enabled":{"type":"bool","description":"Notify on new Cold storage archive","description_kind":"plain","computed":true},"cold_storage_retention":{"type":"number","description":"Cold storage retention in year","description_kind":"plain","computed":true},"cold_storage_target":{"type":"string","description":"ColdStorage destination","description_kind":"plain","computed":true},"created_at":{"type":"string","description":"Stream creation","description_kind":"plain","computed":true},"description":{"type":"string","description":"Stream description","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"indexing_enabled":{"type":"bool","description":"Enable ES indexing","description_kind":"plain","computed":true},"indexing_max_size":{"type":"number","description":"Maximum indexing size (in GB)","description_kind":"plain","computed":true},"indexing_notify_enabled":{"type":"bool","description":"If set, notify when size is near 80, 90 or 100 % of the maximum configured setting","description_kind":"plain","computed":true},"is_editable":{"type":"bool","description":"Indicates if you are allowed to edit entry","description_kind":"plain","computed":true},"is_shareable":{"type":"bool","description":"Indicates if you are allowed to share entry","description_kind":"plain","computed":true},"nb_alert_condition":{"type":"number","description":"Number of alert condition","description_kind":"plain","computed":true},"nb_archive":{"type":"number","description":"Number of coldstored archives","description_kind":"plain","computed":true},"parent_stream_id":{"type":"string","description":"Parent stream ID","description_kind":"plain","computed":true},"pause_indexing_on_max_size":{"type":"bool","description":"If set, pause indexing when maximum size is reach","description_kind":"plain","computed":true},"retention_id":{"type":"string","description":"Retention ID","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The service name","description_kind":"plain","required":true},"stream_id":{"type":"string","description":"Stream ID","description_kind":"plain","computed":true},"title":{"type":"string","description":"Stream description","description_kind":"plain","required":true},"updated_at":{"type":"string","description":"Stream last update","description_kind":"plain","computed":true},"web_socket_enabled":{"type":"bool","description":"Enable Websocket","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_dedicated_ceph":{"version":0,"block":{"attributes":{"ceph_mons":{"type":["list","string"],"description_kind":"plain","computed":true},"ceph_version":{"type":"string","description_kind":"plain","optional":true,"computed":true},"crush_tunables":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description_kind":"plain","computed":true},"region":{"type":"string","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"size":{"type":"number","description_kind":"plain","computed":true},"state":{"type":"string","description_kind":"plain","computed":true},"status":{"type":"string","description_kind":"plain","optional":true,"computed":true},"urn":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_dedicated_installation_templates":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"result":{"type":["list","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_dedicated_nasha":{"version":0,"block":{"attributes":{"can_create_partition":{"type":"bool","description":"True, if partition creation is allowed on this HA-NAS","description_kind":"plain","computed":true},"custom_name":{"type":"string","description":"The name you give to the HA-NAS","description_kind":"plain","computed":true},"datacenter":{"type":"string","description":"area of HA-NAS","description_kind":"plain","computed":true},"disk_type":{"type":"string","description":"the disk type of the HA-NAS","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip":{"type":"string","description":"Access IP of HA-NAS","description_kind":"plain","computed":true},"monitored":{"type":"bool","description":"Send an email to customer if any issue is detected","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The storage service name","description_kind":"plain","required":true},"urn":{"type":"string","description_kind":"plain","computed":true},"zpool_capacity":{"type":"number","description":"percentage of HA-NAS space used in %","description_kind":"plain","computed":true},"zpool_size":{"type":"number","description":"the size of the HA-NAS","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_dedicated_server":{"version":0,"block":{"attributes":{"boot_id":{"type":"number","description_kind":"plain","computed":true},"commercial_range":{"type":"string","description":"dedicater server commercial range","description_kind":"plain","computed":true},"datacenter":{"type":"string","description":"dedicated datacenter localisation (bhs1,bhs2,...)","description_kind":"plain","computed":true},"enabled_public_vnis":{"type":["list","string"],"description":"List of enabled public VNI uuids","description_kind":"plain","computed":true},"enabled_vrack_aggregation_vnis":{"type":["list","string"],"description":"List of enabled vrack_aggregation VNI uuids","description_kind":"plain","computed":true},"enabled_vrack_vnis":{"type":["list","string"],"description":"List of enabled vrack VNI uuids","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip":{"type":"string","description":"dedicated server ip (IPv4)","description_kind":"plain","computed":true},"ips":{"type":["list","string"],"description":"dedicated server ip blocks","description_kind":"plain","computed":true},"link_speed":{"type":"number","description_kind":"plain","computed":true},"monitoring":{"type":"bool","description":"Icmp monitoring state","description_kind":"plain","computed":true},"name":{"type":"string","description":"dedicated server name","description_kind":"plain","computed":true},"os":{"type":"string","description":"Operating system","description_kind":"plain","computed":true},"professional_use":{"type":"bool","description":"Does this server have professional use option","description_kind":"plain","computed":true},"rack":{"type":"string","description_kind":"plain","computed":true},"rescue_mail":{"type":"string","description_kind":"plain","computed":true},"reverse":{"type":"string","description":"dedicated server reverse","description_kind":"plain","computed":true},"root_device":{"type":"string","description_kind":"plain","computed":true},"server_id":{"type":"number","description":"your server id","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"state":{"type":"string","description":"error, hacked, hackedBlocked, ok","description_kind":"plain","computed":true},"support_level":{"type":"string","description":"Dedicated server support level (critical, fastpath, gs, pro)","description_kind":"plain","computed":true},"urn":{"type":"string","description_kind":"plain","computed":true},"vnis":{"type":["list",["object",{"enabled":"bool","mode":"string","name":"string","nics":["list","string"],"server_name":"string","uuid":"string","vrack":"string"}]],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_dedicated_server_boots":{"version":0,"block":{"attributes":{"boot_type":{"type":"string","description":"Filter the value of bootType property","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kernel":{"type":"string","description":"Filter the value of kernel property","description_kind":"plain","optional":true},"result":{"type":["list","number"],"description":"Server compatibles netboots ids","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The internal name of your dedicated server.","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_dedicated_servers":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"result":{"type":["list","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_domain_zone":{"version":0,"block":{"attributes":{"dnssec_supported":{"type":"bool","description_kind":"plain","computed":true},"has_dns_anycast":{"type":"bool","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"last_update":{"type":"string","description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","required":true},"name_servers":{"type":["set","string"],"description_kind":"plain","computed":true},"urn":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_hosting_privatedatabase":{"version":0,"block":{"attributes":{"cpu":{"type":"number","description":"Number of CPU on your private database","description_kind":"plain","computed":true},"datacenter":{"type":"string","description":"Datacenter where this private database is located","description_kind":"plain","computed":true},"display_name":{"type":"string","description":"Name displayed in customer panel for your private database","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"Private database hostname","description_kind":"plain","computed":true},"hostname_ftp":{"type":"string","description":"Private database FTP hostname","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"infrastructure":{"type":"string","description":"Infrastructure where service was stored","description_kind":"plain","computed":true},"offer":{"type":"string","description":"Type of the private database offer","description_kind":"plain","computed":true},"port":{"type":"number","description":"Private database service port","description_kind":"plain","computed":true},"port_ftp":{"type":"number","description":"Private database FTP port","description_kind":"plain","computed":true},"quota_size":{"type":"number","description":"Space allowed (in MB) on your private database","description_kind":"plain","computed":true},"quota_used":{"type":"number","description":"Space used (in MB) on your private database","description_kind":"plain","computed":true},"ram":{"type":"number","description":"Amount of ram (in MB) on your private database","description_kind":"plain","computed":true},"server":{"type":"string","description":"Private database server name","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"state":{"type":"string","description":"Private database state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Private database type","description_kind":"plain","computed":true},"urn":{"type":"string","description_kind":"plain","computed":true},"version":{"type":"string","description":"Private database available versions","description_kind":"plain","computed":true},"version_label":{"type":"string","description":"Private database version label","description_kind":"plain","computed":true},"version_number":{"type":"number","description":"Private database version number","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_hosting_privatedatabase_database":{"version":0,"block":{"attributes":{"backup_time":{"type":"string","description":"Time of the next backup (every day)","description_kind":"plain","computed":true},"creation_date":{"type":"string","description":"Creation date of the database","description_kind":"plain","computed":true},"database_name":{"type":"string","description":"Database name","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"quota_used":{"type":"number","description":"Space used by the database (in MB)","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The internal name of your private database","description_kind":"plain","required":true},"users":{"type":["set",["object",{"grant_type":"string","user_name":"string"}]],"description":"Users granted to this database","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_hosting_privatedatabase_user":{"version":0,"block":{"attributes":{"creation_date":{"type":"string","description":"Creation date of the user","description_kind":"plain","computed":true},"databases":{"type":["set",["object",{"database_name":"string","grant_type":"string"}]],"description":"Databases granted for this user","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"The internal name of your private database","description_kind":"plain","required":true},"user_name":{"type":"string","description":"User name used to connect to your databases","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_hosting_privatedatabase_user_grant":{"version":0,"block":{"attributes":{"creation_date":{"type":"string","description":"Creation date of the user","description_kind":"plain","computed":true},"database_name":{"type":"string","description":"Database name","description_kind":"plain","required":true},"grant":{"type":"string","description":"Grant name","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"service_name":{"type":"string","description":"The internal name of your private database","description_kind":"plain","required":true},"user_name":{"type":"string","description":"User name used to connect to your databases","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_hosting_privatedatabase_whitelist":{"version":0,"block":{"attributes":{"creation_date":{"type":"string","description":"Creation date of this whitelist","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip":{"type":"string","description":"The whitelisted IP in your instance","description_kind":"plain","optional":true},"last_update":{"type":"string","description":"The last update date of this whitelist","description_kind":"plain","computed":true},"name":{"type":"string","description":"Custom name for your Whitelisted IP","description_kind":"plain","computed":true},"service":{"type":"bool","description":"Authorize this IP to access service port","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The internal name of your private database","description_kind":"plain","required":true},"sftp":{"type":"bool","description":"Authorize this IP to access SFTP port","description_kind":"plain","computed":true},"status":{"type":"string","description":"Whitelist status","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_iam_policies":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"policies":{"type":["set","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_iam_policy":{"version":0,"block":{"attributes":{"allow":{"type":["set","string"],"description_kind":"plain","optional":true},"created_at":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","optional":true},"except":{"type":["set","string"],"description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","required":true},"identities":{"type":["set","string"],"description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","computed":true},"owner":{"type":"string","description_kind":"plain","computed":true},"read_only":{"type":"bool","description_kind":"plain","computed":true},"resources":{"type":["set","string"],"description_kind":"plain","computed":true},"updated_at":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_iam_reference_actions":{"version":0,"block":{"attributes":{"actions":{"type":["set",["object",{"action":"string","categories":["set","string"],"description":"string","resource_type":"string"}]],"description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"type":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_iam_reference_resource_type":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"types":{"type":["set","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_ip_service":{"version":0,"block":{"attributes":{"can_be_terminated":{"type":"bool","description_kind":"plain","computed":true},"country":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description":"Custom description on your ip","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip":{"type":"string","description_kind":"plain","computed":true},"organisation_id":{"type":"string","description":"IP block organisation Id","description_kind":"plain","computed":true},"routed_to":{"type":["list",["object",{"service_name":"string"}]],"description":"Routage information","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The service name","description_kind":"plain","required":true},"type":{"type":"string","description":"Possible values for ip type","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_iploadbalancing":{"version":0,"block":{"attributes":{"display_name":{"type":"string","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_loadbalancing":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipv4":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipv6":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metrics_token":{"type":"string","description_kind":"plain","computed":true,"sensitive":true},"offer":{"type":"string","description_kind":"plain","optional":true,"computed":true},"orderable_zone":{"type":["set",["object",{"name":"string","plan_code":"string"}]],"description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ssl_configuration":{"type":"string","description_kind":"plain","optional":true,"computed":true},"state":{"type":"string","description_kind":"plain","optional":true,"computed":true},"urn":{"type":"string","description_kind":"plain","computed":true},"vrack_eligibility":{"type":"bool","description_kind":"plain","optional":true,"computed":true},"vrack_name":{"type":"string","description_kind":"plain","optional":true,"computed":true},"zone":{"type":["set","string"],"description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"ovh_iploadbalancing_vrack_network":{"version":0,"block":{"attributes":{"display_name":{"type":"string","description":"Human readable name for your vrack network","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"nat_ip":{"type":"string","description":"An IP block used as a pool of IPs by this Load Balancer to connect to the servers in this private network. The blck must be in the private network and reserved for the Load Balancer","description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The internal name of your IPloadbalancer","description_kind":"plain","required":true},"subnet":{"type":"string","description":"IP block of the private network in the vRack","description_kind":"plain","computed":true},"vlan":{"type":"number","description":"VLAN of the private network in the vRack. 0 if the private network is not in a VLAN","description_kind":"plain","computed":true},"vrack_network_id":{"type":"number","description":"Internal Load Balancer identifier of the vRack private network","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_iploadbalancing_vrack_networks":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"result":{"type":["list","number"],"description_kind":"plain","computed":true},"service_name":{"type":"string","description":"The internal name of your iploadbalancer.","description_kind":"plain","required":true},"subnet":{"type":"string","description":"Filters on subnet","description_kind":"plain","optional":true},"vlan_id":{"type":"number","description":"Filters on vlan id","description_kind":"plain","optional":true}},"description_kind":"plain"}},"ovh_me":{"version":0,"block":{"attributes":{"address":{"type":"string","description":"Address of nichandle","description_kind":"plain","computed":true},"area":{"type":"string","description":"Area of nichandle","description_kind":"plain","computed":true},"birth_city":{"type":"string","description":"City of birth","description_kind":"plain","computed":true},"birth_day":{"type":"string","description":"Birth date","description_kind":"plain","computed":true},"city":{"type":"string","description":"City of nichandle","description_kind":"plain","computed":true},"company_national_identification_number":{"type":"string","description":"Company National Identification Number","description_kind":"plain","computed":true},"corporation_type":{"type":"string","description":"Corporation type","description_kind":"plain","computed":true},"country":{"type":"string","description":"Customer country","description_kind":"plain","computed":true},"currency":{"type":["list",["object",{"code":"string","symbol":"string"}]],"description":"Customer currency","description_kind":"plain","computed":true},"customer_code":{"type":"string","description":"Your customer code (a numerical value used for identification when contacting support via phone call)","description_kind":"plain","computed":true},"email":{"type":"string","description":"Email address","description_kind":"plain","computed":true},"fax":{"type":"string","description":"Fax number","description_kind":"plain","computed":true},"firstname":{"type":"string","description":"First name","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"italian_sdi":{"type":"string","description":"Italian SDI","description_kind":"plain","computed":true},"language":{"type":"string","description":"Language","description_kind":"plain","computed":true},"legalform":{"type":"string","description":"Customer legal form","description_kind":"plain","computed":true},"name":{"type":"string","description":"Customer name","description_kind":"plain","computed":true},"national_identification_number":{"type":"string","description":"National Identification Number","description_kind":"plain","computed":true},"nichandle":{"type":"string","description":"Customer identifier","description_kind":"plain","computed":true},"organisation":{"type":"string","description":"Name of organisation","description_kind":"plain","computed":true},"ovh_company":{"type":"string","description":"OVH subsidiary","description_kind":"plain","computed":true},"ovh_subsidiary":{"type":"string","description":"OVH subsidiary","description_kind":"plain","computed":true},"phone":{"type":"string","description":"Phone number","description_kind":"plain","computed":true},"phone_country":{"type":"string","description":"Phone number's country code","description_kind":"plain","computed":true},"sex":{"type":"string","description":"Gender","description_kind":"plain","computed":true},"spare_email":{"type":"string","description":"Spare email","description_kind":"plain","computed":true},"state":{"type":"string","description":"Nichandle state","description_kind":"plain","computed":true},"urn":{"type":"string","description":"Identity URN of the account","description_kind":"plain","computed":true},"vat":{"type":"string","description":"VAT number","description_kind":"plain","computed":true},"zip":{"type":"string","description":"Zipcode","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_me_identity_group":{"version":0,"block":{"attributes":{"creation":{"type":"string","description_kind":"plain","computed":true},"default_group":{"type":"bool","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"last_update":{"type":"string","description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","required":true},"role":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_me_identity_groups":{"version":0,"block":{"attributes":{"groups":{"type":["set","string"],"description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"ovh_me_identity_user":{"version":0,"block":{"attributes":{"creation":{"type":"string","description":"Creation date of this user","description_kind":"plain","computed":true},"description":{"type":"string","description":"User description","description_kind":"plain","computed":true},"email":{"type":"string","description":"User's email","description_kind":"plain","computed":true},"group":{"type":"string","description":"User's group","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"last_update":{"type":"string","description":"Last update of this user","description_kind":"plain","computed":true},"login":{"type":"string","description":"User's login suffix","description_kind":"plain","computed":true},"password_last_update":{"type":"string","description":"When the user changed his password for the last time","description_kind":"plain","computed":true},"status":{"type":"string","description":"Current user's status","description_kind":"plain","computed":true},"urn":{"type":"string","description_kind":"plain","computed":true},"user":{"type":"string","description":"User's login","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_me_identity_users":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"users":{"type":["set","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_me_installation_template":{"version":0,"block":{"attributes":{"available_languages":{"type":["list","string"],"description":"List of all language available for this template","description_kind":"plain","computed":true},"beta":{"type":"bool","description":"This distribution is new and, although tested and functional, may still display odd behaviour","description_kind":"plain","computed":true},"bit_format":{"type":"number","description":"This template bit format (32 or 64)","description_kind":"plain","computed":true},"category":{"type":"string","description":"Category of this template (informative only). (basic, customer, hosting, other, readyToUse, virtualisation)","description_kind":"plain","computed":true},"customization":{"type":["list",["object",{"change_log":"string","custom_hostname":"string","post_installation_script_link":"string","post_installation_script_return":"string","rating":"number","ssh_key_name":"string","use_distribution_kernel":"bool"}]],"description_kind":"plain","computed":true},"default_language":{"type":"string","description":"The default language of this template","description_kind":"plain","computed":true},"deprecated":{"type":"bool","description":"is this distribution deprecated","description_kind":"plain","computed":true},"description":{"type":"string","description":"information about this template","description_kind":"plain","computed":true},"distribution":{"type":"string","description":"the distribution this template is based on","description_kind":"plain","computed":true},"family":{"type":"string","description":"this template family type (bsd,linux,solaris,windows)","description_kind":"plain","computed":true},"filesystems":{"type":["list","string"],"description":"Filesystems available (btrfs,ext3,ext4,ntfs,reiserfs,swap,ufs,xfs,zfs)","description_kind":"plain","computed":true},"hard_raid_configuration":{"type":"bool","description":"This distribution supports hardware raid configuration through the OVH API","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"last_modification":{"type":"string","description":"Date of last modification of the base image","description_kind":"plain","computed":true},"lvm_ready":{"type":"bool","description":"This distribution supports Logical Volumes (Linux LVM)","description_kind":"plain","computed":true},"partition_scheme":{"type":["list",["object",{"hardware_raid":["list",["object",{"disks":["list","string"],"mode":"string","name":"string","step":"number"}]],"name":"string","partition":["list",["object",{"filesystem":"string","mountpoint":"string","order":"number","raid":"string","size":"number","type":"string","volume_name":"string"}]],"priority":"number"}]],"description_kind":"plain","computed":true},"supports_distribution_kernel":{"type":"bool","description":"This distribution supports installation using the distribution's native kernel instead of the recommended OVH kernel","description_kind":"plain","computed":true},"supports_rtm":{"type":"bool","description":"This distribution supports RTM software","description_kind":"plain","computed":true},"supports_sql_server":{"type":"bool","description":"This distribution supports the microsoft SQL server","description_kind":"plain","computed":true},"template_name":{"type":"string","description":"This template name","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_me_installation_templates":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"result":{"type":["list","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_me_ipxe_script":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of your script","description_kind":"plain","required":true},"script":{"type":"string","description":"Content of your IPXE script","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_me_ipxe_scripts":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"result":{"type":["list","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_me_paymentmean_bankaccount":{"version":0,"block":{"attributes":{"default":{"type":"bool","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","computed":true},"description_regexp":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"state":{"type":"string","description_kind":"plain","optional":true,"computed":true},"use_default":{"type":"bool","description_kind":"plain","optional":true},"use_oldest":{"type":"bool","description_kind":"plain","optional":true}},"description_kind":"plain","deprecated":true}},"ovh_me_paymentmean_creditcard":{"version":0,"block":{"attributes":{"default":{"type":"bool","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","computed":true},"description_regexp":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"state":{"type":"string","description_kind":"plain","computed":true},"states":{"type":["set","string"],"description_kind":"plain","optional":true},"use_default":{"type":"bool","description_kind":"plain","optional":true},"use_last_to_expire":{"type":"bool","description_kind":"plain","optional":true}},"description_kind":"plain","deprecated":true}},"ovh_me_ssh_key":{"version":0,"block":{"attributes":{"default":{"type":"bool","description":"True when this public Ssh key is used for rescue mode and reinstallations","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"ASCII encoded public Ssh key","description_kind":"plain","computed":true},"key_name":{"type":"string","description":"Name of this public Ssh key","description_kind":"plain","required":true}},"description_kind":"plain"}},"ovh_me_ssh_keys":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"names":{"type":["set","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_order_cart":{"version":0,"block":{"attributes":{"assign":{"type":"bool","description":"Assign a shopping cart to a logged in client","description_kind":"plain","optional":true},"cart_id":{"type":"string","description":"Cart identifier","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description of your cart","description_kind":"plain","optional":true},"expire":{"type":"string","description":"Expiration time (format: 2006-01-02T15:04:05Z07:00)","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"items":{"type":["list","number"],"description":"Items of your cart","description_kind":"plain","computed":true},"ovh_subsidiary":{"type":"string","description":"Ovh Subsidiary","description_kind":"plain","required":true},"read_only":{"type":"bool","description":"Indicates if the cart has already been validated","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_order_cart_product":{"version":0,"block":{"attributes":{"cart_id":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"product":{"type":"string","description":"Product","description_kind":"plain","required":true},"result":{"type":["list",["object",{"plan_code":"string","prices":["list",["object",{"capacities":["list","string"],"description":"string","duration":"string","interval":"number","maximum_quantity":"number","maximum_repeat":"number","minimum_quantity":"number","minimum_repeat":"number","price":["list",["object",{"currency_code":"string","text":"string","value":"number"}]],"price_in_ucents":"number","pricing_mode":"string","pricing_type":"string"}]],"product_name":"string","product_type":"string"}]],"description":"List of representations of a generic product","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_order_cart_product_options":{"version":0,"block":{"attributes":{"cart_id":{"type":"string","description_kind":"plain","required":true},"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"plan_code":{"type":"string","description":"Product offer identifier","description_kind":"plain","required":true},"product":{"type":"string","description":"Product","description_kind":"plain","required":true},"result":{"type":["list",["object",{"exclusive":"bool","family":"string","mandatory":"bool","plan_code":"string","prices":["list",["object",{"capacities":["list","string"],"description":"string","duration":"string","interval":"number","maximum_quantity":"number","maximum_repeat":"number","minimum_quantity":"number","minimum_repeat":"number","price":["list",["object",{"currency_code":"string","text":"string","value":"number"}]],"price_in_ucents":"number","pricing_mode":"string","pricing_type":"string"}]],"product_name":"string","product_type":"string"}]],"description":"List of representations of a generic product","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_order_cart_product_options_plan":{"version":0,"block":{"attributes":{"cart_id":{"type":"string","description_kind":"plain","required":true},"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"exclusive":{"type":"bool","description":"Define if options of this family are exclusive with each other","description_kind":"plain","computed":true},"family":{"type":"string","description":"Option family","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"mandatory":{"type":"bool","description":"Define if an option of this family is mandatory","description_kind":"plain","computed":true},"options_plan_code":{"type":"string","description_kind":"plain","required":true},"plan_code":{"type":"string","description_kind":"plain","required":true},"price_capacity":{"type":"string","description":"Capacity of the pricing (type of pricing)","description_kind":"plain","required":true},"prices":{"type":["list",["object",{"capacities":["list","string"],"description":"string","duration":"string","interval":"number","maximum_quantity":"number","maximum_repeat":"number","minimum_quantity":"number","minimum_repeat":"number","price":["list",["object",{"currency_code":"string","text":"string","value":"number"}]],"price_in_ucents":"number","pricing_mode":"string","pricing_type":"string"}]],"description":"Prices of the product offer","description_kind":"plain","computed":true},"product":{"type":"string","description":"Product","description_kind":"plain","required":true},"product_name":{"type":"string","description":"Name of the product","description_kind":"plain","computed":true},"product_type":{"type":"string","description":"Product type","description_kind":"plain","computed":true},"selected_price":{"type":["list",["object",{"capacities":["list","string"],"description":"string","duration":"string","interval":"number","maximum_quantity":"number","maximum_repeat":"number","minimum_quantity":"number","minimum_repeat":"number","price":["list",["object",{"currency_code":"string","text":"string","value":"number"}]],"price_in_ucents":"number","pricing_mode":"string","pricing_type":"string"}]],"description":"Selected Price according to capacity","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_order_cart_product_plan":{"version":0,"block":{"attributes":{"cart_id":{"type":"string","description_kind":"plain","required":true},"catalog_name":{"type":"string","description":"Catalog name","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"plan_code":{"type":"string","description_kind":"plain","required":true},"price_capacity":{"type":"string","description":"Capacity of the pricing (type of pricing)","description_kind":"plain","required":true},"prices":{"type":["list",["object",{"capacities":["list","string"],"description":"string","duration":"string","interval":"number","maximum_quantity":"number","maximum_repeat":"number","minimum_quantity":"number","minimum_repeat":"number","price":["list",["object",{"currency_code":"string","text":"string","value":"number"}]],"price_in_ucents":"number","pricing_mode":"string","pricing_type":"string"}]],"description":"Prices of the product offer","description_kind":"plain","computed":true},"product":{"type":"string","description":"Product","description_kind":"plain","required":true},"product_name":{"type":"string","description":"Name of the product","description_kind":"plain","computed":true},"product_type":{"type":"string","description":"Product type","description_kind":"plain","computed":true},"selected_price":{"type":["list",["object",{"capacities":["list","string"],"description":"string","duration":"string","interval":"number","maximum_quantity":"number","maximum_repeat":"number","minimum_quantity":"number","minimum_repeat":"number","price":["list",["object",{"currency_code":"string","text":"string","value":"number"}]],"price_in_ucents":"number","pricing_mode":"string","pricing_type":"string"}]],"description":"Selected Price according to capacity","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_vps":{"version":0,"block":{"attributes":{"cluster":{"type":"string","description_kind":"plain","computed":true},"datacenter":{"type":["map","string"],"description_kind":"plain","computed":true},"displayname":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ips":{"type":["set","string"],"description_kind":"plain","computed":true},"keymap":{"type":"string","description_kind":"plain","computed":true},"memory":{"type":"number","description_kind":"plain","computed":true},"model":{"type":["map","string"],"description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","computed":true},"netbootmode":{"type":"string","description_kind":"plain","computed":true},"offertype":{"type":"string","description_kind":"plain","computed":true},"service_name":{"type":"string","description_kind":"plain","required":true},"slamonitoring":{"type":"bool","description_kind":"plain","computed":true},"state":{"type":"string","description_kind":"plain","computed":true},"type":{"type":"string","description_kind":"plain","computed":true},"urn":{"type":"string","description_kind":"plain","computed":true},"vcore":{"type":"number","description_kind":"plain","computed":true},"zone":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_vpss":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"result":{"type":["list","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"ovh_vracks":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"result":{"type":["list","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}}}}}} diff --git a/config/user/config.go b/config/user/config.go new file mode 100644 index 0000000..70e0f30 --- /dev/null +++ b/config/user/config.go @@ -0,0 +1,27 @@ +package user + +import ( + "github.com/crossplane/upjet/pkg/config" +) + +// Configure user resources +func Configure(p *config.Provider) { + p.AddResourceConfigurator("ovh_cloud_project_user", func(r *config.Resource) { + r.ShortGroup = "user.cloud" + r.Kind = "User" + }) + p.AddResourceConfigurator("ovh_cloud_project_user_s3_policy", func(r *config.Resource) { + r.References["user_id"] = config.Reference{ + Type: "github.com/saagie/upjet-provider-ovh/apis/user/v1alpha1.User", + } + r.ShortGroup = "user.cloud" + r.Kind = "S3Policy" + }) + p.AddResourceConfigurator("ovh_cloud_project_user_s3_credential", func(r *config.Resource) { + r.References["user_id"] = config.Reference{ + Type: "github.com/saagie/upjet-provider-ovh/apis/user/v1alpha1.User", + } + r.ShortGroup = "user.cloud" + r.Kind = "S3Credentials" + }) +} diff --git a/examples-generated/database/database.yaml b/examples-generated/database/database.yaml new file mode 100644 index 0000000..2fbe561 --- /dev/null +++ b/examples-generated/database/database.yaml @@ -0,0 +1,20 @@ +apiVersion: database.cloud.ovh.saagie.io/v1alpha1 +kind: Database +metadata: + annotations: + meta.upbound.io/example-id: database/v1alpha1/database + labels: + testing.upbound.io/example-name: cassandradb + name: cassandradb +spec: + forProvider: + description: my-first-cassandra + engine: cassandra + flavor: db1-4 + nodes: + - region: BHS + - region: BHS + - region: BHS + plan: essential + serviceName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + version: "4.0" diff --git a/examples-generated/kube/iprestrictions.yaml b/examples-generated/kube/iprestrictions.yaml new file mode 100644 index 0000000..7d8caf6 --- /dev/null +++ b/examples-generated/kube/iprestrictions.yaml @@ -0,0 +1,16 @@ +apiVersion: kube.cloud.ovh.saagie.io/v1alpha1 +kind: IpRestrictions +metadata: + annotations: + meta.upbound.io/example-id: kube/v1alpha1/iprestrictions + labels: + testing.upbound.io/example-name: vrack_only + name: vrack-only +spec: + forProvider: + ips: + - 10.42.0.0/16 + kubeIdSelector: + matchLabels: + testing.upbound.io/example-name: example + serviceName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx diff --git a/examples-generated/kube/kube.yaml b/examples-generated/kube/kube.yaml new file mode 100644 index 0000000..1a641e0 --- /dev/null +++ b/examples-generated/kube/kube.yaml @@ -0,0 +1,13 @@ +apiVersion: kube.cloud.ovh.saagie.io/v1alpha1 +kind: Kube +metadata: + annotations: + meta.upbound.io/example-id: kube/v1alpha1/kube + labels: + testing.upbound.io/example-name: mycluster + name: mycluster +spec: + forProvider: + name: my_kube_cluster + region: GRA7 + serviceName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx diff --git a/examples-generated/kube/nodepool.yaml b/examples-generated/kube/nodepool.yaml new file mode 100644 index 0000000..e52448a --- /dev/null +++ b/examples-generated/kube/nodepool.yaml @@ -0,0 +1,19 @@ +apiVersion: kube.cloud.ovh.saagie.io/v1alpha1 +kind: NodePool +metadata: + annotations: + meta.upbound.io/example-id: kube/v1alpha1/nodepool + labels: + testing.upbound.io/example-name: node_pool + name: node-pool +spec: + forProvider: + desiredNodes: 3 + flavorName: b2-7 + kubeIdSelector: + matchLabels: + testing.upbound.io/example-name: example + maxNodes: 3 + minNodes: 3 + name: my-pool-1 + serviceName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx diff --git a/examples-generated/null/resource.yaml b/examples-generated/null/resource.yaml deleted file mode 100644 index 59f7545..0000000 --- a/examples-generated/null/resource.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: null.template.upbound.io/v1alpha1 -kind: Resource -metadata: - annotations: - meta.upbound.io/example-id: null/v1alpha1/resource - labels: - testing.upbound.io/example-name: cluster - name: cluster -spec: - forProvider: - connection: - - host: ${element(aws_instance.cluster.*.public_ip, 0)} - provisioner: - remote-exec: - - inline: - - bootstrap-cluster.sh ${join(" ", aws_instance.cluster.*.private_ip)} - triggers: - cluster_instance_ids: ${join(",", aws_instance.cluster.*.id)} diff --git a/examples-generated/user/s3policy.yaml b/examples-generated/user/s3policy.yaml new file mode 100644 index 0000000..3936f62 --- /dev/null +++ b/examples-generated/user/s3policy.yaml @@ -0,0 +1,40 @@ +apiVersion: user.cloud.ovh.saagie.io/v1alpha1 +kind: S3Policy +metadata: + annotations: + meta.upbound.io/example-id: user/v1alpha1/s3policy + labels: + testing.upbound.io/example-name: policy + name: policy +spec: + forProvider: + policy: |- + ${jsonencode({ + "Statement":[{ + "Sid": "RWContainer", + "Effect": "Allow", + "Action":["s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads", "s3:AbortMultipartUpload", "s3:GetBucketLocation"], + "Resource":["arn:aws:s3:::hp-bucket", "arn:aws:s3:::hp-bucket/*"] + }] + })} + serviceName: ${ovh_cloud_project_user.user.service_name} + userIdSelector: + matchLabels: + testing.upbound.io/example-name: user + +--- + +apiVersion: user.cloud.ovh.saagie.io/v1alpha1 +kind: User +metadata: + annotations: + meta.upbound.io/example-id: user.cloud/v1alpha1/s3policy + labels: + testing.upbound.io/example-name: user + name: user +spec: + forProvider: + description: my user + roleNames: + - objectstore_operator + serviceName: XXX diff --git a/examples-generated/user/user.yaml b/examples-generated/user/user.yaml new file mode 100644 index 0000000..f405656 --- /dev/null +++ b/examples-generated/user/user.yaml @@ -0,0 +1,11 @@ +apiVersion: user.cloud.ovh.saagie.io/v1alpha1 +kind: User +metadata: + annotations: + meta.upbound.io/example-id: user/v1alpha1/user + labels: + testing.upbound.io/example-name: user1 + name: user1 +spec: + forProvider: + serviceName: XXX diff --git a/examples/composition.yml b/examples/composition.yml new file mode 100644 index 0000000..527f082 --- /dev/null +++ b/examples/composition.yml @@ -0,0 +1,190 @@ +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: crossplane-clusterrolebinding +subjects: + - kind: ServiceAccount + name: crossplane + namespace: crossplane-system + - kind: ServiceAccount + name: default + namespace: default +roleRef: + kind: ClusterRole + name: cluster-admin + apiGroup: "" +--- +apiVersion: apiextensions.crossplane.io/v1 +kind: CompositeResourceDefinition +metadata: + name: xplatforms.ovh.saagie.io +spec: + group: ovh.saagie.io + names: + kind: XPlatform + plural: xplatforms + claimNames: + kind: Platform + plural: platforms + versions: + - name: v1alpha1 + served: true + referenceable: true + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + properties: + parameters: + type: object + properties: + kubernetes: + type: object + properties: + version: + type: string + flavorName: + type: string + postgresql: + type: object + properties: + version: + type: string + plan: + type: string + flavor: + type: string + serviceName: + type: string + region: + type: string + zone: + type: string + required: + - parameters +--- +apiVersion: apiextensions.crossplane.io/v1 +kind: Composition +metadata: + name: test + labels: + crossplane.io/xrd: xplatforms.ovh.saagie.io +spec: + compositeTypeRef: + apiVersion: ovh.saagie.io/v1alpha1 + kind: XPlatform + resources: + - name: database + base: + apiVersion: database.cloud.ovh.upbound.io/v1alpha1 + kind: Database + spec: + forProvider: + description: "postgresql" + engine: postgresql +# version: "14" +# plan: essential +# flavor: db1-4 + nodes: + - region: GRA + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.serviceName + toFieldPath: spec.forProvider.serviceName + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.postgresql.version + toFieldPath: spec.forProvider.version + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.postgresql.plan + toFieldPath: spec.forProvider.plan + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.postgresql.flavor + toFieldPath: spec.forProvider.flavor + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.postgresql.region + toFieldPath: spec.forProvider.nodes[0].region + - name: kube + base: + apiVersion: kube.cloud.ovh.upbound.io/v1alpha1 + kind: Kube + spec: + forProvider: + name: "cluster" + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.serviceName + toFieldPath: spec.forProvider.serviceName + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.zone + toFieldPath: spec.forProvider.region + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.kubernetes.version + toFieldPath: spec.forProvider.version + - name: kubenode + base: + apiVersion: kube.cloud.ovh.upbound.io/v1alpha1 + kind: NodePool + spec: + forProvider: + kubeIdSelector: + matchControllerRef: true + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.serviceName + toFieldPath: spec.forProvider.serviceName + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.kubernetes.flavorName + toFieldPath: spec.forProvider.flavorName + - name: kubeiperstrictions + base: + apiVersion: kube.cloud.ovh.upbound.io/v1alpha1 + kind: IpRestrictions + spec: + forProvider: + kubeIdSelector: + matchControllerRef: true + ips: + - 0.0.0.0/0 + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.serviceName + toFieldPath: spec.forProvider.serviceName + - name: s3user + base: + apiVersion: user.cloud.ovh.upbound.io/v1alpha1 + kind: User + spec: + forProvider: + description: "customer_admin" + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.serviceName + toFieldPath: spec.forProvider.serviceName + - name: s3Credentials + base: + apiVersion: user.cloud.ovh.upbound.io/v1alpha1 + kind: S3Credentials + spec: + forProvider: + userIdSelector: + matchControllerRef: true + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.serviceName + toFieldPath: spec.forProvider.serviceName + - name: s3Policy + base: + apiVersion: user.cloud.ovh.upbound.io/v1alpha1 + kind: S3Policy + spec: + forProvider: + policy: "{\"Statement\": [{\"Sid\": \"RWContainer\", \"Effect\": \"Allow\", \"Action\": [\"s3:CreateBucket\", \"s3:GetObject\", \"s3:PutObject\", \"s3:DeleteObject\", \"s3:ListBucket\", \"s3:ListMultipartUploadParts\", \"s3:ListBucketMultipartUploads\", \"s3:AbortMultipartUpload\", \"s3:GetBucketLocation\"], \"Resource\": [\"arn:aws:s3:::*\", \"arn:aws:s3:::*/*\"]}, {\"Sid\": \"ProtectTerraform\", \"Effect\": \"Deny\", \"Action\": [\"s3:*\"], \"Resource\": [\"arn:aws:s3:::test-terraform-state\", \"arn:aws:s3:::test-terraform-state/*\"]}]}" + userIdSelector: + matchControllerRef: true + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.serviceName + toFieldPath: spec.forProvider.serviceName diff --git a/examples/database/database.yaml b/examples/database/database.yaml new file mode 100644 index 0000000..b83a2d0 --- /dev/null +++ b/examples/database/database.yaml @@ -0,0 +1,37 @@ +apiVersion: database.cloud.ovh.saagie.io/v1alpha1 +kind: Database +metadata: + name: hello-crossplane +spec: + forProvider: + description: "postgresql test crossplane" + engine: postgresql + serviceName: 7485b2ac7d67456a888409f0e882e7eb + version: "14" + plan: essential + flavor: db1-4 + nodes: + - region: GRA + providerConfigRef: + name: ovh-provider-config +--- +apiVersion: database.cloud.ovh.saagie.io/v1alpha1 +kind: Database +metadata: + name: hello-crossplane-observe + annotations: + "crossplane.io/external-name": "806768e8-82ab-4c0e-9451-ee3b0ae5f200" +spec: + managementPolicies: + - Observe + forProvider: + description: "postgresql test crossplane" + engine: postgresql + serviceName: 7485b2ac7d67456a888409f0e882e7eb + version: "14" + plan: essential + flavor: db1-4 + nodes: + - region: GRA + providerConfigRef: + name: ovh-provider-config \ No newline at end of file diff --git a/examples/install.yaml b/examples/install.yaml index d03f1cc..827602c 100644 --- a/examples/install.yaml +++ b/examples/install.yaml @@ -1,6 +1,6 @@ apiVersion: pkg.crossplane.io/v1 kind: Provider metadata: - name: upjet-provider-template + name: provider-ovh spec: - package: upbound/upjet-provider-template:v0.1.0 + package: saagie/upjet-provider-ovh:v0.1.0 diff --git a/examples/kubernetes/kubernetes.yaml b/examples/kubernetes/kubernetes.yaml new file mode 100644 index 0000000..5afbfce --- /dev/null +++ b/examples/kubernetes/kubernetes.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: kube.cloud.ovh.saagie.io/v1alpha1 +kind: Kube +metadata: + name: hello-crossplane +spec: + providerConfigRef: + name: ovh-provider-config + forProvider: + name: "test crossplane" + region: GRA9 + serviceName: 7485b2ac7d67456a888409f0e882e7eb + version: "1.26" + +--- +apiVersion: kube.cloud.ovh.saagie.io/v1alpha1 +kind: IpRestrictions +metadata: + name: "hello-crossplane" +spec: + providerConfigRef: + name: ovh-provider-config + forProvider: + serviceName: 7485b2ac7d67456a888409f0e882e7eb + ips: + - 0.0.0.0/0 + kubeIdRef: + name: hello-crossplane \ No newline at end of file diff --git a/examples/kubernetes/kubernetes_node_pool.yaml b/examples/kubernetes/kubernetes_node_pool.yaml new file mode 100644 index 0000000..3e24c62 --- /dev/null +++ b/examples/kubernetes/kubernetes_node_pool.yaml @@ -0,0 +1,19 @@ +--- +apiVersion: kube.cloud.ovh.saagie.io/v1alpha1 +kind: NodePool +metadata: + name: hello-crossplane + annotations: + "crossplane.io/external-name": "607a2c62-dfdd-4a96-907b-a15fc123e791" +spec: + providerConfigRef: + name: ovh-provider-config + forProvider: + serviceName: 7485b2ac7d67456a888409f0e882e7eb + name: hello-crossplane + flavorName: b2-7 + desiredNodes: 1 + monthlyBilled: false + kubeIdRef: + name: hello-crossplane + diff --git a/examples/kubernetes/kubernetes_observ.yaml b/examples/kubernetes/kubernetes_observ.yaml new file mode 100644 index 0000000..9e19382 --- /dev/null +++ b/examples/kubernetes/kubernetes_observ.yaml @@ -0,0 +1,18 @@ +--- +apiVersion: kube.cloud.ovh.saagie.io/v1alpha1 +kind: Kube +metadata: + name: dev + annotations: + "crossplane.io/external-name": "607a2c62-dfdd-4a96-907b-a15fc123e791" +spec: + managementPolicies: + - Observe + providerConfigRef: + name: ovh-provider-config + forProvider: + name: "dev" + serviceName: 7485b2ac7d67456a888409f0e882e7eb + writeConnectionSecretToRef: + name: kubeconfig + namespace: default \ No newline at end of file diff --git a/examples/null/resource.yaml b/examples/null/resource.yaml deleted file mode 100644 index fa5f479..0000000 --- a/examples/null/resource.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: null.template.upbound.io/v1alpha1 -kind: Resource -metadata: - name: example -spec: - forProvider: - triggers: - example-trigger: example-value - providerConfigRef: - name: default \ No newline at end of file diff --git a/examples/platform.yml b/examples/platform.yml new file mode 100644 index 0000000..7d108ee --- /dev/null +++ b/examples/platform.yml @@ -0,0 +1,19 @@ +--- +apiVersion: ovh.saagie.io/v1alpha1 +kind: Platform +metadata: + name: test +spec: + parameters: + serviceName: 7485b2ac7d67456a888409f0e882e7eb + region: GRA + zone: GRA9 + postgresql: + version: "14" + plan: "essential" + flavor: "db1-4" + kubernetes: + version: "1.21" + flavorName: "b2-60" + compositionRef: + name: test \ No newline at end of file diff --git a/examples/providerconfig/providerconfig.yaml b/examples/providerconfig/providerconfig.yaml index e7106ac..6a36ef0 100644 --- a/examples/providerconfig/providerconfig.yaml +++ b/examples/providerconfig/providerconfig.yaml @@ -1,4 +1,4 @@ -apiVersion: template.upbound.io/v1beta1 +apiVersion: ovh.saagie.io/v1beta1 kind: ProviderConfig metadata: name: default diff --git a/examples/s3/policy.json b/examples/s3/policy.json new file mode 100644 index 0000000..059e1cc --- /dev/null +++ b/examples/s3/policy.json @@ -0,0 +1,34 @@ +git{ + "Statement": [ + { + "Sid": "RWContainer", + "Effect": "Allow", + "Action": [ + "s3:CreateBucket", + "s3:GetObject", + "s3:PutObject", + "s3:DeleteObject", + "s3:ListBucket", + "s3:ListMultipartUploadParts", + "s3:ListBucketMultipartUploads", + "s3:AbortMultipartUpload", + "s3:GetBucketLocation" + ], + "Resource": [ + "arn:aws:s3:::*", + "arn:aws:s3:::*/*" + ] + }, + { + "Sid": "ProtectTerraform", + "Effect": "Deny", + "Action": [ + "s3:*" + ], + "Resource": [ + "arn:aws:s3:::${var.installation_id}-terraform-state", + "arn:aws:s3:::${var.installation_id}-terraform-state/*" + ] + } + ] +} \ No newline at end of file diff --git a/examples/s3/s3.yaml b/examples/s3/s3.yaml new file mode 100644 index 0000000..58ce445 --- /dev/null +++ b/examples/s3/s3.yaml @@ -0,0 +1,94 @@ +--- +apiVersion: user.cloud.ovh.saagie.io/v1alpha1 +kind: User +metadata: + name: hello-crossplane +spec: + providerConfigRef: + name: ovh-provider-config + forProvider: + description: hello-crossplane + serviceName: 7485b2ac7d67456a888409f0e882e7eb + roleNames: + - objectstore_operator + writeConnectionSecretToRef: + name: s3-user + namespace: default +--- +apiVersion: user.cloud.ovh.saagie.io/v1alpha1 +kind: User +metadata: + name: hello-crossplane-observ + annotations: + "crossplane.io/external-name": "267995" +spec: + managementPolicies: + - Observe + providerConfigRef: + name: ovh-provider-config + forProvider: + serviceName: 7485b2ac7d67456a888409f0e882e7eb + writeConnectionSecretToRef: + name: s3user + namespace: default +--- +apiVersion: user.cloud.ovh.saagie.io/v1alpha1 +kind: S3Credentials +metadata: + name: hello-crossplane +spec: + providerConfigRef: + name: ovh-provider-config + forProvider: + serviceName: 7485b2ac7d67456a888409f0e882e7eb + userIdRef: + name: hello-crossplane-observ + writeConnectionSecretToRef: + name: s3-credentials + namespace: default +# name: hello-crossplane +--- +apiVersion: user.cloud.ovh.saagie.io/v1alpha1 +kind: S3Credentials +metadata: + name: hello-crossplane-observ + annotations: + "crossplane.io/external-name": "b080f4bf08604cde92f05e936d504490" +spec: + managementPolicies: + - Observe + providerConfigRef: + name: ovh-provider-config + forProvider: + serviceName: 7485b2ac7d67456a888409f0e882e7eb + userIdRef: + name: hello-crossplane +--- +apiVersion: user.cloud.ovh.saagie.io/v1alpha1 +kind: S3Policy +metadata: + name: hello-crossplane +spec: + providerConfigRef: + name: ovh-provider-config + forProvider: + serviceName: 7485b2ac7d67456a888409f0e882e7eb + policy: "{\"Statement\": [{\"Sid\": \"RWContainer\", \"Effect\": \"Allow\", \"Action\": [\"s3:CreateBucket\", \"s3:GetObject\", \"s3:PutObject\", \"s3:DeleteObject\", \"s3:ListBucket\", \"s3:ListMultipartUploadParts\", \"s3:ListBucketMultipartUploads\", \"s3:AbortMultipartUpload\", \"s3:GetBucketLocation\"], \"Resource\": [\"arn:aws:s3:::*\", \"arn:aws:s3:::*/*\"]}, {\"Sid\": \"ProtectTerraform\", \"Effect\": \"Deny\", \"Action\": [\"s3:*\"], \"Resource\": [\"arn:aws:s3:::test-terraform-state\", \"arn:aws:s3:::test-terraform-state/*\"]}]}" + userIdRef: + name: hello-crossplane +--- +apiVersion: user.cloud.ovh.saagie.io/v1alpha1 +kind: S3Policy +metadata: + name: hello-crossplane-observ + annotations: + "crossplane.io/external-name": "7485b2ac7d67456a888409f0e882e7eb/313903" +spec: + managementPolicies: + - Observe + providerConfigRef: + name: ovh-provider-config + forProvider: + serviceName: 7485b2ac7d67456a888409f0e882e7eb + userIdRef: + name: hello-crossplane diff --git a/examples/storeconfig/vault.yaml b/examples/storeconfig/vault.yaml index e19a9a5..dc2e9dc 100644 --- a/examples/storeconfig/vault.yaml +++ b/examples/storeconfig/vault.yaml @@ -1,4 +1,4 @@ -apiVersion: template.upbound.io/v1alpha1 +apiVersion: ovh.saagie.io/v1alpha1 kind: StoreConfig metadata: name: vault diff --git a/examples/test.yml b/examples/test.yml new file mode 100644 index 0000000..5d5749b --- /dev/null +++ b/examples/test.yml @@ -0,0 +1,78 @@ +apiVersion: apiextensions.crossplane.io/v1 +kind: CompositeResourceDefinition +metadata: + name: xpostgresqlinstances.database.example.org +spec: + group: database.example.org + names: + kind: XPostgreSQLInstance + plural: xpostgresqlinstances + claimNames: + kind: PostgreSQLInstance + plural: postgresqlinstances + versions: + - name: v1alpha1 + served: true + referenceable: true + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + properties: + parameters: + type: object + properties: + storageGB: + type: integer + required: + - storageGB + required: + - parameters +--- +apiVersion: apiextensions.crossplane.io/v1 +kind: Composition +metadata: + name: production + labels: + crossplane.io/xrd: xpostgresqlinstances.database.example.org + provider: gcp +spec: + writeConnectionSecretsToNamespace: crossplane-system + compositeTypeRef: + apiVersion: database.example.org/v1alpha1 + kind: XPostgreSQLInstance + resources: + - name: cloudsqlinstance + base: + apiVersion: database.gcp.crossplane.io/v1beta1 + kind: CloudSQLInstance + spec: + forProvider: + databaseVersion: POSTGRES_12 + region: us-central1 + settings: + tier: db-custom-1-3840 + dataDiskType: PD_SSD + ipConfiguration: + ipv4Enabled: true + authorizedNetworks: + - value: "0.0.0.0/0" + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.storageGB + toFieldPath: spec.forProvider.settings.dataDiskSizeGb +--- +apiVersion: database.example.org/v1alpha1 +kind: PostgreSQLInstance +metadata: + namespace: default + name: my-db +spec: + parameters: + storageGB: 20 + compositionRef: + name: production + writeConnectionSecretToRef: + name: my-db-connection-details \ No newline at end of file diff --git a/go.mod b/go.mod index 2f3a492..da4ba16 100644 --- a/go.mod +++ b/go.mod @@ -1,21 +1,21 @@ -module github.com/upbound/upjet-provider-template +module github.com/saagie/upjet-provider-ovh go 1.19 require ( - github.com/crossplane/crossplane-runtime v1.14.0-rc.0.0.20231011070344-cc691421c2e5 + dario.cat/mergo v1.0.0 + github.com/crossplane/crossplane-runtime v1.14.2 github.com/crossplane/crossplane-tools v0.0.0-20230925130601-628280f8bf79 - github.com/crossplane/upjet v0.11.0-rc.0.0.20231012093706-c4a76d2a7505 + github.com/crossplane/upjet v1.0.0 github.com/pkg/errors v0.9.1 gopkg.in/alecthomas/kingpin.v2 v2.2.6 - k8s.io/apimachinery v0.28.2 - k8s.io/client-go v0.28.2 - sigs.k8s.io/controller-runtime v0.16.2 + k8s.io/apimachinery v0.28.3 + k8s.io/client-go v0.28.3 + sigs.k8s.io/controller-runtime v0.16.3 sigs.k8s.io/controller-tools v0.13.0 ) require ( - dario.cat/mergo v1.0.0 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect @@ -26,7 +26,7 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/dave/jennifer v1.4.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/emicklei/go-restful/v3 v3.10.2 // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fatih/camelcase v1.0.0 // indirect github.com/fatih/color v1.15.0 // indirect @@ -44,7 +44,7 @@ require ( github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.3.0 // indirect + github.com/google/uuid v1.3.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect github.com/hashicorp/go-hclog v1.2.1 // indirect @@ -89,28 +89,29 @@ require ( github.com/vmihailenco/tagparser v0.1.1 // indirect github.com/yuin/goldmark v1.4.13 // indirect github.com/zclconf/go-cty v1.11.0 // indirect + github.com/zclconf/go-cty-yaml v1.0.3 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.15.0 // indirect - golang.org/x/oauth2 v0.10.0 // indirect - golang.org/x/sys v0.12.0 // indirect - golang.org/x/term v0.12.0 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/mod v0.13.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/oauth2 v0.11.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.13.0 // indirect + golang.org/x/tools v0.14.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect - google.golang.org/grpc v1.58.3 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.28.2 // indirect - k8s.io/apiextensions-apiserver v0.28.2 // indirect - k8s.io/component-base v0.28.2 // indirect + k8s.io/api v0.28.3 // indirect + k8s.io/apiextensions-apiserver v0.28.3 // indirect + k8s.io/component-base v0.28.3 // indirect k8s.io/klog/v2 v2.100.1 // indirect k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect diff --git a/go.sum b/go.sum index 0fff85b..943ae3f 100644 --- a/go.sum +++ b/go.sum @@ -73,19 +73,19 @@ github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnht github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/crossplane/crossplane-runtime v1.14.0-rc.0.0.20231011070344-cc691421c2e5 h1:K1Km6NCu9+VlZB3CmWSjrs09cDSbwQxJd2Qw2002dFs= -github.com/crossplane/crossplane-runtime v1.14.0-rc.0.0.20231011070344-cc691421c2e5/go.mod h1:kCS5576be8g++HhiDGEBUw+8nkW8p4jhURYeC0zx8jM= +github.com/crossplane/crossplane-runtime v1.14.2 h1:pV5JMzyzi/kcbeVBVPCat5MHH8zS94MBUapAyGx/Ry0= +github.com/crossplane/crossplane-runtime v1.14.2/go.mod h1:aOP+5W2wKpvthVs3pFNbVOe1jwrKYbJho0ThGNCVz9o= github.com/crossplane/crossplane-tools v0.0.0-20230925130601-628280f8bf79 h1:HigXs5tEQxWz0fcj8hzbU2UAZgEM7wPe0XRFOsrtF8Y= github.com/crossplane/crossplane-tools v0.0.0-20230925130601-628280f8bf79/go.mod h1:+e4OaFlOcmr0JvINHl/yvEYBrZawzTgj6pQumOH1SS0= -github.com/crossplane/upjet v0.11.0-rc.0.0.20231012093706-c4a76d2a7505 h1:eCmYgfRopVn6r8RM1Ra4XQAPwVsjTGfktBj2Dk7yy+Y= -github.com/crossplane/upjet v0.11.0-rc.0.0.20231012093706-c4a76d2a7505/go.mod h1:Ov+eoYS2n0Zge/E50zm65meOTYbAHnU6jPt27fQrpbc= +github.com/crossplane/upjet v1.0.0 h1:/R509m+c5XTLsd9oXTEaLj2yIbM/EUmG34XOou1dugM= +github.com/crossplane/upjet v1.0.0/go.mod h1:t9etxIdYaxgyvFPBToikm5zBHi8RIpX8N4mTH77lQFM= github.com/dave/jennifer v1.4.1 h1:XyqG6cn5RQsTj3qlWQTKlRGAyrTcsk1kUmWdZBzRjDw= github.com/dave/jennifer v1.4.1/go.mod h1:7jEdnm+qBcxl8PC0zyp7vxcpSRnzXSt9r39tpTVGlwA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/emicklei/go-restful/v3 v3.10.2 h1:hIovbnmBTLjHXkqEBUz3HGpXZdM7ZrE9fJIZIqlJLqE= -github.com/emicklei/go-restful/v3 v3.10.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -194,8 +194,8 @@ github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 h1:pUa4ghanp6q4IJHwE9RwLgmVFfReJN+KbQ8ExNEUUoQ= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= @@ -315,6 +315,7 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= @@ -359,6 +360,8 @@ github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uU github.com/zclconf/go-cty v1.11.0 h1:726SxLdi2SDnjY+BStqB9J1hNp4+2WlzyXLuimibIe0= github.com/zclconf/go-cty v1.11.0/go.mod h1:s9IfD1LK5ccNMSWCVFCE2rJfHiZgi7JijgeWIMfhLvA= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= +github.com/zclconf/go-cty-yaml v1.0.3 h1:og/eOQ7lvA/WWhHGFETVWNduJM7Rjsv2RRpx1sdFMLc= +github.com/zclconf/go-cty-yaml v1.0.3/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -392,8 +395,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -418,8 +421,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= +golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -455,8 +458,8 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -466,8 +469,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= -golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= +golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -479,7 +482,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -524,11 +527,11 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -596,8 +599,8 @@ golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= +golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -667,8 +670,8 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -685,8 +688,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= -google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -725,16 +728,16 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.28.2 h1:9mpl5mOb6vXZvqbQmankOfPIGiudghwCoLl1EYfUZbw= -k8s.io/api v0.28.2/go.mod h1:RVnJBsjU8tcMq7C3iaRSGMeaKt2TWEUXcpIt/90fjEg= -k8s.io/apiextensions-apiserver v0.28.2 h1:J6/QRWIKV2/HwBhHRVITMLYoypCoPY1ftigDM0Kn+QU= -k8s.io/apiextensions-apiserver v0.28.2/go.mod h1:5tnkxLGa9nefefYzWuAlWZ7RZYuN/765Au8cWLA6SRg= -k8s.io/apimachinery v0.28.2 h1:KCOJLrc6gu+wV1BYgwik4AF4vXOlVJPdiqn0yAWWwXQ= -k8s.io/apimachinery v0.28.2/go.mod h1:RdzF87y/ngqk9H4z3EL2Rppv5jj95vGS/HaFXrLDApU= -k8s.io/client-go v0.28.2 h1:DNoYI1vGq0slMBN/SWKMZMw0Rq+0EQW6/AK4v9+3VeY= -k8s.io/client-go v0.28.2/go.mod h1:sMkApowspLuc7omj1FOSUxSoqjr+d5Q0Yc0LOFnYFJY= -k8s.io/component-base v0.28.2 h1:Yc1yU+6AQSlpJZyvehm/NkJBII72rzlEsd6MkBQ+G0E= -k8s.io/component-base v0.28.2/go.mod h1:4IuQPQviQCg3du4si8GpMrhAIegxpsgPngPRR/zWpzc= +k8s.io/api v0.28.3 h1:Gj1HtbSdB4P08C8rs9AR94MfSGpRhJgsS+GF9V26xMM= +k8s.io/api v0.28.3/go.mod h1:MRCV/jr1dW87/qJnZ57U5Pak65LGmQVkKTzf3AtKFHc= +k8s.io/apiextensions-apiserver v0.28.3 h1:Od7DEnhXHnHPZG+W9I97/fSQkVpVPQx2diy+2EtmY08= +k8s.io/apiextensions-apiserver v0.28.3/go.mod h1:NE1XJZ4On0hS11aWWJUTNkmVB03j9LM7gJSisbRt8Lc= +k8s.io/apimachinery v0.28.3 h1:B1wYx8txOaCQG0HmYF6nbpU8dg6HvA06x5tEffvOe7A= +k8s.io/apimachinery v0.28.3/go.mod h1:uQTKmIqs+rAYaq+DFaoD2X7pcjLOqbQX2AOiO0nIpb8= +k8s.io/client-go v0.28.3 h1:2OqNb72ZuTZPKCl+4gTKvqao0AMOl9f3o2ijbAj3LI4= +k8s.io/client-go v0.28.3/go.mod h1:LTykbBp9gsA7SwqirlCXBWtK0guzfhpoW4qSm7i9dxo= +k8s.io/component-base v0.28.3 h1:rDy68eHKxq/80RiMb2Ld/tbH8uAE75JdCqJyi6lXMzI= +k8s.io/component-base v0.28.3/go.mod h1:fDJ6vpVNSk6cRo5wmDa6eKIG7UlIQkaFmZN2fYgIUD8= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= @@ -744,8 +747,8 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.16.2 h1:mwXAVuEk3EQf478PQwQ48zGOXvW27UJc8NHktQVuIPU= -sigs.k8s.io/controller-runtime v0.16.2/go.mod h1:vpMu3LpI5sYWtujJOa2uPK61nB5rbwlN7BAB8aSLvGU= +sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= +sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/controller-tools v0.13.0 h1:NfrvuZ4bxyolhDBt/rCZhDnx3M2hzlhgo5n3Iv2RykI= sigs.k8s.io/controller-tools v0.13.0/go.mod h1:5vw3En2NazbejQGCeWKRrE7q4P+CW8/klfVqP8QZkgA= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= diff --git a/internal/clients/template.go b/internal/clients/ovh.go similarity index 78% rename from internal/clients/template.go rename to internal/clients/ovh.go index 078f7ec..9180998 100644 --- a/internal/clients/template.go +++ b/internal/clients/ovh.go @@ -15,7 +15,7 @@ import ( "github.com/crossplane/upjet/pkg/terraform" - "github.com/upbound/upjet-provider-template/apis/v1beta1" + "github.com/saagie/upjet-provider-ovh/apis/v1beta1" ) const ( @@ -24,7 +24,15 @@ const ( errGetProviderConfig = "cannot get referenced ProviderConfig" errTrackUsage = "cannot track ProviderConfig usage" errExtractCredentials = "cannot extract credentials" - errUnmarshalCredentials = "cannot unmarshal template credentials as JSON" + errUnmarshalCredentials = "cannot unmarshal ovh credentials as JSON" +) + +const ( + // Terraform provider configuration keys for AWS credentials + endpoint = "endpoint" + applicationKey = "application_key" + applicationSecret = "application_secret" + consumerKey = "consumer_key" ) // TerraformSetupBuilder builds Terraform a terraform.SetupFn function which @@ -63,10 +71,12 @@ func TerraformSetupBuilder(version, providerSource, providerVersion string) terr } // Set credentials in Terraform provider configuration. - /*ps.Configuration = map[string]any{ - "username": creds["username"], - "password": creds["password"], - }*/ + ps.Configuration = map[string]any{ + endpoint: creds[endpoint], + applicationKey: creds[applicationKey], + applicationSecret: creds[applicationSecret], + consumerKey: creds[consumerKey], + } return ps, nil } } diff --git a/internal/controller/null/resource/zz_controller.go b/internal/controller/database/database/zz_controller.go similarity index 77% rename from internal/controller/null/resource/zz_controller.go rename to internal/controller/database/database/zz_controller.go index 8dedab8..5b16418 100755 --- a/internal/controller/null/resource/zz_controller.go +++ b/internal/controller/database/database/zz_controller.go @@ -8,7 +8,7 @@ Copyright 2022 Upbound Inc. // Code generated by upjet. DO NOT EDIT. -package resource +package database import ( "time" @@ -23,22 +23,22 @@ import ( "github.com/crossplane/upjet/pkg/terraform" ctrl "sigs.k8s.io/controller-runtime" - v1alpha1 "github.com/upbound/upjet-provider-template/apis/null/v1alpha1" - features "github.com/upbound/upjet-provider-template/internal/features" + v1alpha1 "github.com/saagie/upjet-provider-ovh/apis/database/v1alpha1" + features "github.com/saagie/upjet-provider-ovh/internal/features" ) -// Setup adds a controller that reconciles Resource managed resources. +// Setup adds a controller that reconciles Database managed resources. func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { - name := managed.ControllerName(v1alpha1.Resource_GroupVersionKind.String()) + name := managed.ControllerName(v1alpha1.Database_GroupVersionKind.String()) var initializers managed.InitializerChain cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Resource_GroupVersionKind))) - ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Resource_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Database_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Database_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) opts := []managed.ReconcilerOption{ - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["null_resource"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["ovh_cloud_project_database"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), @@ -55,12 +55,12 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.Features.Enabled(features.EnableBetaManagementPolicies) { opts = append(opts, managed.WithManagementPolicies()) } - r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Resource_GroupVersionKind), opts...) + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Database_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). WithEventFilter(xpresource.DesiredStateChanged()). - Watches(&v1alpha1.Resource{}, eventHandler). + Watches(&v1alpha1.Database{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/kube/iprestrictions/zz_controller.go b/internal/controller/kube/iprestrictions/zz_controller.go new file mode 100755 index 0000000..88e6334 --- /dev/null +++ b/internal/controller/kube/iprestrictions/zz_controller.go @@ -0,0 +1,66 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package iprestrictions + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + ctrl "sigs.k8s.io/controller-runtime" + + v1alpha1 "github.com/saagie/upjet-provider-ovh/apis/kube/v1alpha1" + features "github.com/saagie/upjet-provider-ovh/internal/features" +) + +// Setup adds a controller that reconciles IpRestrictions managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1alpha1.IpRestrictions_GroupVersionKind.String()) + var initializers managed.InitializerChain + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.IpRestrictions_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.IpRestrictions_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["ovh_cloud_project_kube_iprestrictions"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), + )), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.IpRestrictions_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.IpRestrictions{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/kube/kube/zz_controller.go b/internal/controller/kube/kube/zz_controller.go new file mode 100755 index 0000000..6d1a060 --- /dev/null +++ b/internal/controller/kube/kube/zz_controller.go @@ -0,0 +1,66 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package kube + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + ctrl "sigs.k8s.io/controller-runtime" + + v1alpha1 "github.com/saagie/upjet-provider-ovh/apis/kube/v1alpha1" + features "github.com/saagie/upjet-provider-ovh/internal/features" +) + +// Setup adds a controller that reconciles Kube managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1alpha1.Kube_GroupVersionKind.String()) + var initializers managed.InitializerChain + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Kube_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Kube_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["ovh_cloud_project_kube"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), + )), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Kube_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Kube{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/kube/nodepool/zz_controller.go b/internal/controller/kube/nodepool/zz_controller.go new file mode 100755 index 0000000..5352d5b --- /dev/null +++ b/internal/controller/kube/nodepool/zz_controller.go @@ -0,0 +1,66 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package nodepool + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + ctrl "sigs.k8s.io/controller-runtime" + + v1alpha1 "github.com/saagie/upjet-provider-ovh/apis/kube/v1alpha1" + features "github.com/saagie/upjet-provider-ovh/internal/features" +) + +// Setup adds a controller that reconciles NodePool managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1alpha1.NodePool_GroupVersionKind.String()) + var initializers managed.InitializerChain + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.NodePool_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.NodePool_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["ovh_cloud_project_kube_nodepool"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), + )), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.NodePool_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.NodePool{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/providerconfig/config.go b/internal/controller/providerconfig/config.go index 73c10b4..ba6047f 100644 --- a/internal/controller/providerconfig/config.go +++ b/internal/controller/providerconfig/config.go @@ -11,7 +11,7 @@ import ( "github.com/crossplane/upjet/pkg/controller" ctrl "sigs.k8s.io/controller-runtime" - "github.com/upbound/upjet-provider-template/apis/v1beta1" + "github.com/saagie/upjet-provider-ovh/apis/v1beta1" ) // Setup adds a controller that reconciles ProviderConfigs by accounting for diff --git a/internal/controller/user/s3credentials/zz_controller.go b/internal/controller/user/s3credentials/zz_controller.go new file mode 100755 index 0000000..351b2a4 --- /dev/null +++ b/internal/controller/user/s3credentials/zz_controller.go @@ -0,0 +1,66 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package s3credentials + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + ctrl "sigs.k8s.io/controller-runtime" + + v1alpha1 "github.com/saagie/upjet-provider-ovh/apis/user/v1alpha1" + features "github.com/saagie/upjet-provider-ovh/internal/features" +) + +// Setup adds a controller that reconciles S3Credentials managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1alpha1.S3Credentials_GroupVersionKind.String()) + var initializers managed.InitializerChain + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.S3Credentials_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.S3Credentials_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["ovh_cloud_project_user_s3_credential"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), + )), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.S3Credentials_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.S3Credentials{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/user/s3policy/zz_controller.go b/internal/controller/user/s3policy/zz_controller.go new file mode 100755 index 0000000..889798f --- /dev/null +++ b/internal/controller/user/s3policy/zz_controller.go @@ -0,0 +1,66 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package s3policy + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + ctrl "sigs.k8s.io/controller-runtime" + + v1alpha1 "github.com/saagie/upjet-provider-ovh/apis/user/v1alpha1" + features "github.com/saagie/upjet-provider-ovh/internal/features" +) + +// Setup adds a controller that reconciles S3Policy managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1alpha1.S3Policy_GroupVersionKind.String()) + var initializers managed.InitializerChain + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.S3Policy_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.S3Policy_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["ovh_cloud_project_user_s3_policy"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), + )), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.S3Policy_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.S3Policy{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/user/user/zz_controller.go b/internal/controller/user/user/zz_controller.go new file mode 100755 index 0000000..bb2c6cb --- /dev/null +++ b/internal/controller/user/user/zz_controller.go @@ -0,0 +1,66 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package user + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + ctrl "sigs.k8s.io/controller-runtime" + + v1alpha1 "github.com/saagie/upjet-provider-ovh/apis/user/v1alpha1" + features "github.com/saagie/upjet-provider-ovh/internal/features" +) + +// Setup adds a controller that reconciles User managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1alpha1.User_GroupVersionKind.String()) + var initializers managed.InitializerChain + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.User_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.User_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["ovh_cloud_project_user"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), + )), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.User_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.User{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/zz_setup.go b/internal/controller/zz_setup.go index 80f7342..1c34c45 100755 --- a/internal/controller/zz_setup.go +++ b/internal/controller/zz_setup.go @@ -9,16 +9,28 @@ import ( "github.com/crossplane/upjet/pkg/controller" - resource "github.com/upbound/upjet-provider-template/internal/controller/null/resource" - providerconfig "github.com/upbound/upjet-provider-template/internal/controller/providerconfig" + database "github.com/saagie/upjet-provider-ovh/internal/controller/database/database" + iprestrictions "github.com/saagie/upjet-provider-ovh/internal/controller/kube/iprestrictions" + kube "github.com/saagie/upjet-provider-ovh/internal/controller/kube/kube" + nodepool "github.com/saagie/upjet-provider-ovh/internal/controller/kube/nodepool" + providerconfig "github.com/saagie/upjet-provider-ovh/internal/controller/providerconfig" + s3credentials "github.com/saagie/upjet-provider-ovh/internal/controller/user/s3credentials" + s3policy "github.com/saagie/upjet-provider-ovh/internal/controller/user/s3policy" + user "github.com/saagie/upjet-provider-ovh/internal/controller/user/user" ) // Setup creates all controllers with the supplied logger and adds them to // the supplied manager. func Setup(mgr ctrl.Manager, o controller.Options) error { for _, setup := range []func(ctrl.Manager, controller.Options) error{ - resource.Setup, + database.Setup, + iprestrictions.Setup, + kube.Setup, + nodepool.Setup, providerconfig.Setup, + s3credentials.Setup, + s3policy.Setup, + user.Setup, } { if err := setup(mgr, o); err != nil { return err diff --git a/package/crds/database.cloud.ovh.saagie.io_databases.yaml b/package/crds/database.cloud.ovh.saagie.io_databases.yaml new file mode 100644 index 0000000..c81da31 --- /dev/null +++ b/package/crds/database.cloud.ovh.saagie.io_databases.yaml @@ -0,0 +1,583 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + name: databases.database.cloud.ovh.saagie.io +spec: + group: database.cloud.ovh.saagie.io + names: + categories: + - crossplane + - managed + - ovh + kind: Database + listKind: DatabaseList + plural: databases + singular: database + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: Database is the Schema for the Databases API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: DatabaseSpec defines the desired state of Database + properties: + deletionPolicy: + default: Delete + description: 'DeletionPolicy specifies what will happen to the underlying + external when this managed resource is deleted - either "Delete" + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicies field in a future release. Currently, + both could be set independently and non-default values would be + honored if the feature flag is enabled. See the design doc for more + information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223' + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + advancedConfiguration: + additionalProperties: + type: string + description: Advanced configuration key / value. Advanced configuration + key / value + type: object + description: + description: Small description of the database service. Description + of the cluster + type: string + diskSize: + description: The disk size (in GB) of the database service. Disk + size attributes of the cluster + type: number + engine: + description: The database engine you want to deploy. To get a + full list of available engine visit. public documentation. Name + of the engine of the service + type: string + flavor: + description: 'A valid OVHcloud public cloud database flavor name + in which the nodes will be started. Ex: "db1-7". Changing this + value upgrade the nodes with the new flavor. You can find the + list of flavor names: https://www.ovhcloud.com/fr/public-cloud/prices/ + The node flavor used for this cluster' + type: string + kafkaRestApi: + description: Defines whether the REST API is enabled on a kafka + cluster Defines whether the REST API is enabled on a Kafka cluster + type: boolean + nodes: + description: List of nodes object. Multi region cluster are not + yet available, all node should be identical. List of nodes composing + the service + items: + properties: + networkId: + description: Private network id in which the node should + be deployed. It's the regional openstackId of the private + network Private network ID in which the node is. It's + the regional openstackId of the private network. + type: string + region: + description: 'Public cloud region in which the node should + be deployed. Ex: "GRA''. Region of the node' + type: string + subnetId: + description: Private subnet ID in which the node is. Private + subnet ID in which the node is + type: string + type: object + type: array + opensearchAclsEnabled: + description: Defines whether the ACLs are enabled on an OpenSearch + cluster Defines whether the ACLs are enabled on an Opensearch + cluster + type: boolean + plan: + description: 'Plan of the cluster. Enum: "essential", "business", + "enterprise". Plan of the cluster' + type: string + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. + type: string + version: + description: The version of the engine in which the service should + be deployed Version of the engine deployed on the cluster + type: string + type: object + initProvider: + description: THIS IS A BETA FIELD. It will be honored unless the Management + Policies feature flag is disabled. InitProvider holds the same fields + as ForProvider, with the exception of Identifier and other resource + reference fields. The fields that are in InitProvider are merged + into ForProvider when the resource is created. The same fields are + also added to the terraform ignore_changes hook, to avoid updating + them after creation. This is useful for fields that are required + on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, + like an autoscaler. + properties: + advancedConfiguration: + additionalProperties: + type: string + description: Advanced configuration key / value. Advanced configuration + key / value + type: object + description: + description: Small description of the database service. Description + of the cluster + type: string + diskSize: + description: The disk size (in GB) of the database service. Disk + size attributes of the cluster + type: number + engine: + description: The database engine you want to deploy. To get a + full list of available engine visit. public documentation. Name + of the engine of the service + type: string + flavor: + description: 'A valid OVHcloud public cloud database flavor name + in which the nodes will be started. Ex: "db1-7". Changing this + value upgrade the nodes with the new flavor. You can find the + list of flavor names: https://www.ovhcloud.com/fr/public-cloud/prices/ + The node flavor used for this cluster' + type: string + kafkaRestApi: + description: Defines whether the REST API is enabled on a kafka + cluster Defines whether the REST API is enabled on a Kafka cluster + type: boolean + nodes: + description: List of nodes object. Multi region cluster are not + yet available, all node should be identical. List of nodes composing + the service + items: + properties: + networkId: + description: Private network id in which the node should + be deployed. It's the regional openstackId of the private + network Private network ID in which the node is. It's + the regional openstackId of the private network. + type: string + region: + description: 'Public cloud region in which the node should + be deployed. Ex: "GRA''. Region of the node' + type: string + subnetId: + description: Private subnet ID in which the node is. Private + subnet ID in which the node is + type: string + type: object + type: array + opensearchAclsEnabled: + description: Defines whether the ACLs are enabled on an OpenSearch + cluster Defines whether the ACLs are enabled on an Opensearch + cluster + type: boolean + plan: + description: 'Plan of the cluster. Enum: "essential", "business", + "enterprise". Plan of the cluster' + type: string + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. + type: string + version: + description: The version of the engine in which the service should + be deployed Version of the engine deployed on the cluster + type: string + type: object + managementPolicies: + default: + - '*' + description: 'THIS IS A BETA FIELD. It is on by default but can be + opted out through a Crossplane feature flag. ManagementPolicies + specify the array of actions Crossplane is allowed to take on the + managed and external resources. This field is planned to replace + the DeletionPolicy field in a future release. Currently, both could + be set independently and non-default values would be honored if + the feature flag is enabled. If both are custom, the DeletionPolicy + field will be ignored. See the design doc for more information: + https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md' + items: + description: A ManagementAction represents an action that the Crossplane + controllers can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: ProviderConfigReference specifies how the provider that + will be used to create, observe, update, and delete this managed + resource should be configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of this + reference is required. The default is 'Required', which + means the reconcile will fail if the reference cannot be + resolved. 'Optional' means this reference will be a no-op + if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will attempt + to resolve the reference only when the corresponding field + is not present. Use 'Always' to resolve the reference on + every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: PublishConnectionDetailsTo specifies the connection secret + config which contains a name, metadata and a reference to secret + store config to which any connection details for this managed resource + should be written. Connection details frequently include the endpoint, + username, and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: SecretStoreConfigRef specifies which secret store + config should be used for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: Annotations are the annotations to be added to + connection secret. - For Kubernetes secrets, this will be + used as "metadata.annotations". - It is up to Secret Store + implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: Labels are the labels/tags to be added to connection + secret. - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store + types. + type: object + type: + description: Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: WriteConnectionSecretToReference specifies the namespace + and name of a Secret to which any connection details for this managed + resource should be written. Connection details frequently include + the endpoint, username, and password required to connect to the + managed resource. This field is planned to be replaced in a future + release in favor of PublishConnectionDetailsTo. Currently, both + could be set independently and connection details would be published + to both without affecting each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + x-kubernetes-validations: + - message: spec.forProvider.engine is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.engine) + || (has(self.initProvider) && has(self.initProvider.engine))' + - message: spec.forProvider.flavor is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.flavor) + || (has(self.initProvider) && has(self.initProvider.flavor))' + - message: spec.forProvider.nodes is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.nodes) + || (has(self.initProvider) && has(self.initProvider.nodes))' + - message: spec.forProvider.plan is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.plan) + || (has(self.initProvider) && has(self.initProvider.plan))' + - message: spec.forProvider.serviceName is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.serviceName) + || (has(self.initProvider) && has(self.initProvider.serviceName))' + - message: spec.forProvider.version is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.version) + || (has(self.initProvider) && has(self.initProvider.version))' + status: + description: DatabaseStatus defines the observed state of Database. + properties: + atProvider: + properties: + advancedConfiguration: + additionalProperties: + type: string + description: Advanced configuration key / value. Advanced configuration + key / value + type: object + backupTime: + description: Time on which backups start every day. Time on which + backups start every day + type: string + createdAt: + description: Date of the creation of the cluster. Date of the + creation of the cluster + type: string + description: + description: Small description of the database service. Description + of the cluster + type: string + diskSize: + description: The disk size (in GB) of the database service. Disk + size attributes of the cluster + type: number + diskType: + description: Defines the disk type of the database service. Disk + type attributes of the cluster + type: string + endpoints: + description: List of all endpoints objects of the service. List + of all endpoints of the service + items: + properties: + component: + description: Type of component the URI relates to. + type: string + domain: + description: Domain of the cluster. + type: string + path: + description: Path of the endpoint. + type: string + port: + description: Connection port for the endpoint. + type: number + scheme: + description: Scheme used to generate the URI. + type: string + ssl: + description: Defines whether the endpoint uses SSL. + type: boolean + sslMode: + description: SSL mode used to connect to the service if + the SSL is enabled. + type: string + uri: + description: URI of the endpoint. + type: string + type: object + type: array + engine: + description: The database engine you want to deploy. To get a + full list of available engine visit. public documentation. Name + of the engine of the service + type: string + flavor: + description: 'A valid OVHcloud public cloud database flavor name + in which the nodes will be started. Ex: "db1-7". Changing this + value upgrade the nodes with the new flavor. You can find the + list of flavor names: https://www.ovhcloud.com/fr/public-cloud/prices/ + The node flavor used for this cluster' + type: string + id: + description: Public Cloud Database Service ID + type: string + kafkaRestApi: + description: Defines whether the REST API is enabled on a kafka + cluster Defines whether the REST API is enabled on a Kafka cluster + type: boolean + maintenanceTime: + description: Time on which maintenances can start every day. Time + on which maintenances can start every day + type: string + networkType: + description: Type of network of the cluster. Type of network of + the cluster + type: string + nodes: + description: List of nodes object. Multi region cluster are not + yet available, all node should be identical. List of nodes composing + the service + items: + properties: + networkId: + description: Private network id in which the node should + be deployed. It's the regional openstackId of the private + network Private network ID in which the node is. It's + the regional openstackId of the private network. + type: string + region: + description: 'Public cloud region in which the node should + be deployed. Ex: "GRA''. Region of the node' + type: string + subnetId: + description: Private subnet ID in which the node is. Private + subnet ID in which the node is + type: string + type: object + type: array + opensearchAclsEnabled: + description: Defines whether the ACLs are enabled on an OpenSearch + cluster Defines whether the ACLs are enabled on an Opensearch + cluster + type: boolean + plan: + description: 'Plan of the cluster. Enum: "essential", "business", + "enterprise". Plan of the cluster' + type: string + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. + type: string + status: + description: Current status of the cluster. Current status of + the cluster + type: string + version: + description: The version of the engine in which the service should + be deployed Version of the engine deployed on the cluster + type: string + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time this condition + transitioned from one status to another. + format: date-time + type: string + message: + description: A Message containing details about this condition's + last transition from one status to another, if any. + type: string + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: Type of this condition. At most one of each condition + type may apply to a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/package/crds/kube.cloud.ovh.saagie.io_iprestrictions.yaml b/package/crds/kube.cloud.ovh.saagie.io_iprestrictions.yaml new file mode 100644 index 0000000..b770973 --- /dev/null +++ b/package/crds/kube.cloud.ovh.saagie.io_iprestrictions.yaml @@ -0,0 +1,417 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + name: iprestrictions.kube.cloud.ovh.saagie.io +spec: + group: kube.cloud.ovh.saagie.io + names: + categories: + - crossplane + - managed + - ovh + kind: IpRestrictions + listKind: IpRestrictionsList + plural: iprestrictions + singular: iprestrictions + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: IpRestrictions is the Schema for the IpRestrictionss API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: IpRestrictionsSpec defines the desired state of IpRestrictions + properties: + deletionPolicy: + default: Delete + description: 'DeletionPolicy specifies what will happen to the underlying + external when this managed resource is deleted - either "Delete" + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicies field in a future release. Currently, + both could be set independently and non-default values would be + honored if the feature flag is enabled. See the design doc for more + information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223' + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + ips: + description: List of CIDR authorized to interact with the managed + Kubernetes cluster. List of IP restrictions for the cluster + items: + type: string + type: array + kubeId: + description: The id of the managed Kubernetes cluster. Changing + this value recreates the resource. Kube ID + type: string + kubeIdRef: + description: Reference to a Kube in kube to populate kubeId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + kubeIdSelector: + description: Selector for a Kube in kube to populate kubeId. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing + this value recreates the resource. Service name + type: string + type: object + initProvider: + description: THIS IS A BETA FIELD. It will be honored unless the Management + Policies feature flag is disabled. InitProvider holds the same fields + as ForProvider, with the exception of Identifier and other resource + reference fields. The fields that are in InitProvider are merged + into ForProvider when the resource is created. The same fields are + also added to the terraform ignore_changes hook, to avoid updating + them after creation. This is useful for fields that are required + on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, + like an autoscaler. + properties: + ips: + description: List of CIDR authorized to interact with the managed + Kubernetes cluster. List of IP restrictions for the cluster + items: + type: string + type: array + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing + this value recreates the resource. Service name + type: string + type: object + managementPolicies: + default: + - '*' + description: 'THIS IS A BETA FIELD. It is on by default but can be + opted out through a Crossplane feature flag. ManagementPolicies + specify the array of actions Crossplane is allowed to take on the + managed and external resources. This field is planned to replace + the DeletionPolicy field in a future release. Currently, both could + be set independently and non-default values would be honored if + the feature flag is enabled. If both are custom, the DeletionPolicy + field will be ignored. See the design doc for more information: + https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md' + items: + description: A ManagementAction represents an action that the Crossplane + controllers can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: ProviderConfigReference specifies how the provider that + will be used to create, observe, update, and delete this managed + resource should be configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of this + reference is required. The default is 'Required', which + means the reconcile will fail if the reference cannot be + resolved. 'Optional' means this reference will be a no-op + if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will attempt + to resolve the reference only when the corresponding field + is not present. Use 'Always' to resolve the reference on + every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: PublishConnectionDetailsTo specifies the connection secret + config which contains a name, metadata and a reference to secret + store config to which any connection details for this managed resource + should be written. Connection details frequently include the endpoint, + username, and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: SecretStoreConfigRef specifies which secret store + config should be used for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: Annotations are the annotations to be added to + connection secret. - For Kubernetes secrets, this will be + used as "metadata.annotations". - It is up to Secret Store + implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: Labels are the labels/tags to be added to connection + secret. - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store + types. + type: object + type: + description: Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: WriteConnectionSecretToReference specifies the namespace + and name of a Secret to which any connection details for this managed + resource should be written. Connection details frequently include + the endpoint, username, and password required to connect to the + managed resource. This field is planned to be replaced in a future + release in favor of PublishConnectionDetailsTo. Currently, both + could be set independently and connection details would be published + to both without affecting each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + x-kubernetes-validations: + - message: spec.forProvider.ips is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.ips) + || (has(self.initProvider) && has(self.initProvider.ips))' + - message: spec.forProvider.serviceName is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.serviceName) + || (has(self.initProvider) && has(self.initProvider.serviceName))' + status: + description: IpRestrictionsStatus defines the observed state of IpRestrictions. + properties: + atProvider: + properties: + id: + type: string + ips: + description: List of CIDR authorized to interact with the managed + Kubernetes cluster. List of IP restrictions for the cluster + items: + type: string + type: array + kubeId: + description: The id of the managed Kubernetes cluster. Changing + this value recreates the resource. Kube ID + type: string + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing + this value recreates the resource. Service name + type: string + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time this condition + transitioned from one status to another. + format: date-time + type: string + message: + description: A Message containing details about this condition's + last transition from one status to another, if any. + type: string + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: Type of this condition. At most one of each condition + type may apply to a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/package/crds/kube.cloud.ovh.saagie.io_kubes.yaml b/package/crds/kube.cloud.ovh.saagie.io_kubes.yaml new file mode 100644 index 0000000..51298b9 --- /dev/null +++ b/package/crds/kube.cloud.ovh.saagie.io_kubes.yaml @@ -0,0 +1,849 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + name: kubes.kube.cloud.ovh.saagie.io +spec: + group: kube.cloud.ovh.saagie.io + names: + categories: + - crossplane + - managed + - ovh + kind: Kube + listKind: KubeList + plural: kubes + singular: kube + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: Kube is the Schema for the Kubes API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: KubeSpec defines the desired state of Kube + properties: + deletionPolicy: + default: Delete + description: 'DeletionPolicy specifies what will happen to the underlying + external when this managed resource is deleted - either "Delete" + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicies field in a future release. Currently, + both could be set independently and non-default values would be + honored if the feature flag is enabled. See the design doc for more + information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223' + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + customization: + description: Deprecated Use customization_apiserver and customization_kube_proxy + instead. Kubernetes cluster customization + items: + properties: + apiserver: + description: Kubernetes API server customization + items: + properties: + admissionplugins: + description: Kubernetes API server admission plugins + customization + items: + properties: + disabled: + description: Array of admission plugins disabled, + default is [] and only AlwaysPulImages can + be disabled at this time. + items: + type: string + type: array + enabled: + description: Array of admission plugins enabled, + default is ["NodeRestriction","AlwaysPulImages"] + and only these admission plugins can be enabled + at this time. + items: + type: string + type: array + type: object + type: array + type: object + type: array + type: object + type: array + customizationApiserver: + description: Kubernetes API server customization + items: + properties: + admissionplugins: + description: Kubernetes API server admission plugins customization + items: + properties: + disabled: + description: Array of admission plugins disabled, + default is [] and only AlwaysPulImages can be disabled + at this time. + items: + type: string + type: array + enabled: + description: Array of admission plugins enabled, default + is ["NodeRestriction","AlwaysPulImages"] and only + these admission plugins can be enabled at this time. + items: + type: string + type: array + type: object + type: array + type: object + type: array + customizationKubeProxy: + description: Kubernetes kube-proxy customization + items: + properties: + iptables: + description: Kubernetes cluster kube-proxy customization + of iptables specific config (durations format is RFC3339 + duration, e.g. PT60S) + items: + properties: + minSyncPeriod: + description: Period that iptables rules are refreshed, + in RFC3339 duration format (e.g. PT60S). Must be + greater than 0. + type: string + syncPeriod: + description: Minimum period that iptables rules are + refreshed, in RFC3339 duration format (e.g. PT60S). + type: string + type: object + type: array + ipvs: + description: Kubernetes cluster kube-proxy customization + of IPVS specific config (durations format is RFC3339 duration, + e.g. PT60S) + items: + properties: + minSyncPeriod: + description: Period that iptables rules are refreshed, + in RFC3339 duration format (e.g. PT60S). Must be + greater than 0. + type: string + scheduler: + description: IPVS scheduler. + type: string + syncPeriod: + description: Minimum period that iptables rules are + refreshed, in RFC3339 duration format (e.g. PT60S). + type: string + tcpFinTimeout: + description: Timeout value used for IPVS TCP sessions + after receiving a FIN in RFC3339 duration (e.g. + PT60S). The default value is PT0S, which preserves + the current timeout value on the system. + type: string + tcpTimeout: + description: Timeout value used for idle IPVS TCP + sessions in RFC3339 duration (e.g. PT60S). The default + value is PT0S, which preserves the current timeout + value on the system. + type: string + udpTimeout: + description: timeout value used for IPVS UDP packets + in RFC3339 duration (e.g. PT60S). The default value + is PT0S, which preserves the current timeout value + on the system. + type: string + type: object + type: array + type: object + type: array + kubeProxyMode: + description: Selected mode for kube-proxy. Changing this value + recreates the resource, including ETCD user data. Defaults to + iptables. + type: string + name: + description: The name of the kubernetes cluster. + type: string + privateNetworkConfiguration: + description: The private network configuration + items: + properties: + defaultVrackGateway: + description: If defined, all egress traffic will be routed + towards this IP address, which should belong to the private + network. Empty string means disabled. If defined, all + egress traffic will be routed towards this IP address, + which should belong to the private network. Empty string + means disabled. + type: string + privateNetworkRoutingAsDefault: + description: Defines whether routing should default to using + the nodes' private interface, instead of their public + interface. Default is false. Defines whether routing should + default to using the nodes' private interface, instead + of their public interface. Default is false. + type: boolean + type: object + type: array + privateNetworkId: + description: OpenStack private network (or vRack) ID to use. Changing + this value recreates the resource, including ETCD user data. + Defaults - not use private network. + type: string + region: + description: 'a valid OVHcloud public cloud region ID in which + the kubernetes cluster will be available. Ex.: "GRA1". Defaults + to all public cloud regions. Changing this value recreates the + resource.' + type: string + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing + this value recreates the resource. + type: string + updatePolicy: + description: Cluster update policy. Choose between [ALWAYS_UPDATE, + MINIMAL_DOWNTIME, NEVER_UPDATE]. + type: string + version: + description: kubernetes version to use. Changing this value updates + the resource. Defaults to the latest available. + type: string + type: object + initProvider: + description: THIS IS A BETA FIELD. It will be honored unless the Management + Policies feature flag is disabled. InitProvider holds the same fields + as ForProvider, with the exception of Identifier and other resource + reference fields. The fields that are in InitProvider are merged + into ForProvider when the resource is created. The same fields are + also added to the terraform ignore_changes hook, to avoid updating + them after creation. This is useful for fields that are required + on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, + like an autoscaler. + properties: + customization: + description: Deprecated Use customization_apiserver and customization_kube_proxy + instead. Kubernetes cluster customization + items: + properties: + apiserver: + description: Kubernetes API server customization + items: + properties: + admissionplugins: + description: Kubernetes API server admission plugins + customization + items: + properties: + disabled: + description: Array of admission plugins disabled, + default is [] and only AlwaysPulImages can + be disabled at this time. + items: + type: string + type: array + enabled: + description: Array of admission plugins enabled, + default is ["NodeRestriction","AlwaysPulImages"] + and only these admission plugins can be enabled + at this time. + items: + type: string + type: array + type: object + type: array + type: object + type: array + type: object + type: array + customizationApiserver: + description: Kubernetes API server customization + items: + properties: + admissionplugins: + description: Kubernetes API server admission plugins customization + items: + properties: + disabled: + description: Array of admission plugins disabled, + default is [] and only AlwaysPulImages can be disabled + at this time. + items: + type: string + type: array + enabled: + description: Array of admission plugins enabled, default + is ["NodeRestriction","AlwaysPulImages"] and only + these admission plugins can be enabled at this time. + items: + type: string + type: array + type: object + type: array + type: object + type: array + customizationKubeProxy: + description: Kubernetes kube-proxy customization + items: + properties: + iptables: + description: Kubernetes cluster kube-proxy customization + of iptables specific config (durations format is RFC3339 + duration, e.g. PT60S) + items: + properties: + minSyncPeriod: + description: Period that iptables rules are refreshed, + in RFC3339 duration format (e.g. PT60S). Must be + greater than 0. + type: string + syncPeriod: + description: Minimum period that iptables rules are + refreshed, in RFC3339 duration format (e.g. PT60S). + type: string + type: object + type: array + ipvs: + description: Kubernetes cluster kube-proxy customization + of IPVS specific config (durations format is RFC3339 duration, + e.g. PT60S) + items: + properties: + minSyncPeriod: + description: Period that iptables rules are refreshed, + in RFC3339 duration format (e.g. PT60S). Must be + greater than 0. + type: string + scheduler: + description: IPVS scheduler. + type: string + syncPeriod: + description: Minimum period that iptables rules are + refreshed, in RFC3339 duration format (e.g. PT60S). + type: string + tcpFinTimeout: + description: Timeout value used for IPVS TCP sessions + after receiving a FIN in RFC3339 duration (e.g. + PT60S). The default value is PT0S, which preserves + the current timeout value on the system. + type: string + tcpTimeout: + description: Timeout value used for idle IPVS TCP + sessions in RFC3339 duration (e.g. PT60S). The default + value is PT0S, which preserves the current timeout + value on the system. + type: string + udpTimeout: + description: timeout value used for IPVS UDP packets + in RFC3339 duration (e.g. PT60S). The default value + is PT0S, which preserves the current timeout value + on the system. + type: string + type: object + type: array + type: object + type: array + kubeProxyMode: + description: Selected mode for kube-proxy. Changing this value + recreates the resource, including ETCD user data. Defaults to + iptables. + type: string + name: + description: The name of the kubernetes cluster. + type: string + privateNetworkConfiguration: + description: The private network configuration + items: + properties: + defaultVrackGateway: + description: If defined, all egress traffic will be routed + towards this IP address, which should belong to the private + network. Empty string means disabled. If defined, all + egress traffic will be routed towards this IP address, + which should belong to the private network. Empty string + means disabled. + type: string + privateNetworkRoutingAsDefault: + description: Defines whether routing should default to using + the nodes' private interface, instead of their public + interface. Default is false. Defines whether routing should + default to using the nodes' private interface, instead + of their public interface. Default is false. + type: boolean + type: object + type: array + privateNetworkId: + description: OpenStack private network (or vRack) ID to use. Changing + this value recreates the resource, including ETCD user data. + Defaults - not use private network. + type: string + region: + description: 'a valid OVHcloud public cloud region ID in which + the kubernetes cluster will be available. Ex.: "GRA1". Defaults + to all public cloud regions. Changing this value recreates the + resource.' + type: string + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing + this value recreates the resource. + type: string + updatePolicy: + description: Cluster update policy. Choose between [ALWAYS_UPDATE, + MINIMAL_DOWNTIME, NEVER_UPDATE]. + type: string + version: + description: kubernetes version to use. Changing this value updates + the resource. Defaults to the latest available. + type: string + type: object + managementPolicies: + default: + - '*' + description: 'THIS IS A BETA FIELD. It is on by default but can be + opted out through a Crossplane feature flag. ManagementPolicies + specify the array of actions Crossplane is allowed to take on the + managed and external resources. This field is planned to replace + the DeletionPolicy field in a future release. Currently, both could + be set independently and non-default values would be honored if + the feature flag is enabled. If both are custom, the DeletionPolicy + field will be ignored. See the design doc for more information: + https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md' + items: + description: A ManagementAction represents an action that the Crossplane + controllers can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: ProviderConfigReference specifies how the provider that + will be used to create, observe, update, and delete this managed + resource should be configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of this + reference is required. The default is 'Required', which + means the reconcile will fail if the reference cannot be + resolved. 'Optional' means this reference will be a no-op + if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will attempt + to resolve the reference only when the corresponding field + is not present. Use 'Always' to resolve the reference on + every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: PublishConnectionDetailsTo specifies the connection secret + config which contains a name, metadata and a reference to secret + store config to which any connection details for this managed resource + should be written. Connection details frequently include the endpoint, + username, and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: SecretStoreConfigRef specifies which secret store + config should be used for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: Annotations are the annotations to be added to + connection secret. - For Kubernetes secrets, this will be + used as "metadata.annotations". - It is up to Secret Store + implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: Labels are the labels/tags to be added to connection + secret. - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store + types. + type: object + type: + description: Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: WriteConnectionSecretToReference specifies the namespace + and name of a Secret to which any connection details for this managed + resource should be written. Connection details frequently include + the endpoint, username, and password required to connect to the + managed resource. This field is planned to be replaced in a future + release in favor of PublishConnectionDetailsTo. Currently, both + could be set independently and connection details would be published + to both without affecting each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + x-kubernetes-validations: + - message: spec.forProvider.region is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.region) + || (has(self.initProvider) && has(self.initProvider.region))' + - message: spec.forProvider.serviceName is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.serviceName) + || (has(self.initProvider) && has(self.initProvider.serviceName))' + status: + description: KubeStatus defines the observed state of Kube. + properties: + atProvider: + properties: + controlPlaneIsUpToDate: + description: True if control-plane is up-to-date. + type: boolean + customization: + description: Deprecated Use customization_apiserver and customization_kube_proxy + instead. Kubernetes cluster customization + items: + properties: + apiserver: + description: Kubernetes API server customization + items: + properties: + admissionplugins: + description: Kubernetes API server admission plugins + customization + items: + properties: + disabled: + description: Array of admission plugins disabled, + default is [] and only AlwaysPulImages can + be disabled at this time. + items: + type: string + type: array + enabled: + description: Array of admission plugins enabled, + default is ["NodeRestriction","AlwaysPulImages"] + and only these admission plugins can be enabled + at this time. + items: + type: string + type: array + type: object + type: array + type: object + type: array + type: object + type: array + customizationApiserver: + description: Kubernetes API server customization + items: + properties: + admissionplugins: + description: Kubernetes API server admission plugins customization + items: + properties: + disabled: + description: Array of admission plugins disabled, + default is [] and only AlwaysPulImages can be disabled + at this time. + items: + type: string + type: array + enabled: + description: Array of admission plugins enabled, default + is ["NodeRestriction","AlwaysPulImages"] and only + these admission plugins can be enabled at this time. + items: + type: string + type: array + type: object + type: array + type: object + type: array + customizationKubeProxy: + description: Kubernetes kube-proxy customization + items: + properties: + iptables: + description: Kubernetes cluster kube-proxy customization + of iptables specific config (durations format is RFC3339 + duration, e.g. PT60S) + items: + properties: + minSyncPeriod: + description: Period that iptables rules are refreshed, + in RFC3339 duration format (e.g. PT60S). Must be + greater than 0. + type: string + syncPeriod: + description: Minimum period that iptables rules are + refreshed, in RFC3339 duration format (e.g. PT60S). + type: string + type: object + type: array + ipvs: + description: Kubernetes cluster kube-proxy customization + of IPVS specific config (durations format is RFC3339 duration, + e.g. PT60S) + items: + properties: + minSyncPeriod: + description: Period that iptables rules are refreshed, + in RFC3339 duration format (e.g. PT60S). Must be + greater than 0. + type: string + scheduler: + description: IPVS scheduler. + type: string + syncPeriod: + description: Minimum period that iptables rules are + refreshed, in RFC3339 duration format (e.g. PT60S). + type: string + tcpFinTimeout: + description: Timeout value used for IPVS TCP sessions + after receiving a FIN in RFC3339 duration (e.g. + PT60S). The default value is PT0S, which preserves + the current timeout value on the system. + type: string + tcpTimeout: + description: Timeout value used for idle IPVS TCP + sessions in RFC3339 duration (e.g. PT60S). The default + value is PT0S, which preserves the current timeout + value on the system. + type: string + udpTimeout: + description: timeout value used for IPVS UDP packets + in RFC3339 duration (e.g. PT60S). The default value + is PT0S, which preserves the current timeout value + on the system. + type: string + type: object + type: array + type: object + type: array + id: + description: Managed Kubernetes Service ID + type: string + isUpToDate: + description: True if all nodes and control-plane are up-to-date. + type: boolean + kubeProxyMode: + description: Selected mode for kube-proxy. Changing this value + recreates the resource, including ETCD user data. Defaults to + iptables. + type: string + name: + description: The name of the kubernetes cluster. + type: string + nextUpgradeVersions: + description: Kubernetes versions available for upgrade. + items: + type: string + type: array + nodesUrl: + description: Cluster nodes URL. + type: string + privateNetworkConfiguration: + description: The private network configuration + items: + properties: + defaultVrackGateway: + description: If defined, all egress traffic will be routed + towards this IP address, which should belong to the private + network. Empty string means disabled. If defined, all + egress traffic will be routed towards this IP address, + which should belong to the private network. Empty string + means disabled. + type: string + privateNetworkRoutingAsDefault: + description: Defines whether routing should default to using + the nodes' private interface, instead of their public + interface. Default is false. Defines whether routing should + default to using the nodes' private interface, instead + of their public interface. Default is false. + type: boolean + type: object + type: array + privateNetworkId: + description: OpenStack private network (or vRack) ID to use. Changing + this value recreates the resource, including ETCD user data. + Defaults - not use private network. + type: string + region: + description: 'a valid OVHcloud public cloud region ID in which + the kubernetes cluster will be available. Ex.: "GRA1". Defaults + to all public cloud regions. Changing this value recreates the + resource.' + type: string + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing + this value recreates the resource. + type: string + status: + description: Cluster status. Should be normally set to 'READY'. + type: string + updatePolicy: + description: Cluster update policy. Choose between [ALWAYS_UPDATE, + MINIMAL_DOWNTIME, NEVER_UPDATE]. + type: string + url: + description: Management URL of your cluster. + type: string + version: + description: kubernetes version to use. Changing this value updates + the resource. Defaults to the latest available. + type: string + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time this condition + transitioned from one status to another. + format: date-time + type: string + message: + description: A Message containing details about this condition's + last transition from one status to another, if any. + type: string + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: Type of this condition. At most one of each condition + type may apply to a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/package/crds/kube.cloud.ovh.saagie.io_nodepools.yaml b/package/crds/kube.cloud.ovh.saagie.io_nodepools.yaml new file mode 100644 index 0000000..3a5660c --- /dev/null +++ b/package/crds/kube.cloud.ovh.saagie.io_nodepools.yaml @@ -0,0 +1,693 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + name: nodepools.kube.cloud.ovh.saagie.io +spec: + group: kube.cloud.ovh.saagie.io + names: + categories: + - crossplane + - managed + - ovh + kind: NodePool + listKind: NodePoolList + plural: nodepools + singular: nodepool + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: NodePool is the Schema for the NodePools API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: NodePoolSpec defines the desired state of NodePool + properties: + deletionPolicy: + default: Delete + description: 'DeletionPolicy specifies what will happen to the underlying + external when this managed resource is deleted - either "Delete" + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicies field in a future release. Currently, + both could be set independently and non-default values would be + honored if the feature flag is enabled. See the design doc for more + information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223' + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + antiAffinity: + description: should the pool use the anti-affinity feature. Default + to false. Changing this value recreates the resource. Enable + anti affinity groups for nodes in the pool + type: boolean + autoscale: + description: Enable auto-scaling for the pool. Default to false. + Enable auto-scaling for the pool + type: boolean + desiredNodes: + description: number of nodes to start. Number of nodes you desire + in the pool + type: number + flavorName: + description: 'a valid OVHcloud public cloud flavor ID in which + the nodes will be started. Ex: "b2-7". You can find the list + of flavor IDs: https://www.ovhcloud.com/fr/public-cloud/prices/. + Changing this value recreates the resource. Flavor name' + type: string + kubeId: + description: The id of the managed kubernetes cluster. Changing + this value recreates the resource. Kube ID + type: string + kubeIdRef: + description: Reference to a Kube in kube to populate kubeId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + kubeIdSelector: + description: Selector for a Kube in kube to populate kubeId. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + maxNodes: + description: maximum number of nodes allowed in the pool. Setting + desired_nodes over this value will raise an error. Number of + nodes you desire in the pool + type: number + minNodes: + description: minimum number of nodes allowed in the pool. Setting + desired_nodes under this value will raise an error. Number of + nodes you desire in the pool + type: number + monthlyBilled: + description: should the nodes be billed on a monthly basis. Default + to false. Changing this value recreates the resource. Enable + monthly billing on all nodes in the pool + type: boolean + name: + description: 'The name of the nodepool. Warning: _ char is not + allowed! Changing this value recreates the resource. NodePool + resource name' + type: string + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing + this value recreates the resource. Service name + type: string + template: + description: Node pool template + items: + properties: + metadata: + description: Metadata of each node in the pool metadata + items: + properties: + annotations: + additionalProperties: + type: string + description: Annotations to apply to each node annotations + type: object + finalizers: + description: Finalizers to apply to each node. A finalizer + name must be fully qualified, e.g. kubernetes.io/pv-protection + , where you prefix it with hostname of your service + which is related to the controller responsible for + the finalizer. finalizers + items: + type: string + type: array + labels: + additionalProperties: + type: string + description: Labels to apply to each node labels + type: object + type: object + type: array + spec: + description: Spec of each node in the pool spec + items: + properties: + taints: + description: Taints to apply to each node taints + items: + additionalProperties: + type: string + type: object + type: array + unschedulable: + description: If true, set nodes as un-schedulable + unschedulable + type: boolean + type: object + type: array + type: object + type: array + type: object + initProvider: + description: THIS IS A BETA FIELD. It will be honored unless the Management + Policies feature flag is disabled. InitProvider holds the same fields + as ForProvider, with the exception of Identifier and other resource + reference fields. The fields that are in InitProvider are merged + into ForProvider when the resource is created. The same fields are + also added to the terraform ignore_changes hook, to avoid updating + them after creation. This is useful for fields that are required + on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, + like an autoscaler. + properties: + antiAffinity: + description: should the pool use the anti-affinity feature. Default + to false. Changing this value recreates the resource. Enable + anti affinity groups for nodes in the pool + type: boolean + autoscale: + description: Enable auto-scaling for the pool. Default to false. + Enable auto-scaling for the pool + type: boolean + desiredNodes: + description: number of nodes to start. Number of nodes you desire + in the pool + type: number + flavorName: + description: 'a valid OVHcloud public cloud flavor ID in which + the nodes will be started. Ex: "b2-7". You can find the list + of flavor IDs: https://www.ovhcloud.com/fr/public-cloud/prices/. + Changing this value recreates the resource. Flavor name' + type: string + maxNodes: + description: maximum number of nodes allowed in the pool. Setting + desired_nodes over this value will raise an error. Number of + nodes you desire in the pool + type: number + minNodes: + description: minimum number of nodes allowed in the pool. Setting + desired_nodes under this value will raise an error. Number of + nodes you desire in the pool + type: number + monthlyBilled: + description: should the nodes be billed on a monthly basis. Default + to false. Changing this value recreates the resource. Enable + monthly billing on all nodes in the pool + type: boolean + name: + description: 'The name of the nodepool. Warning: _ char is not + allowed! Changing this value recreates the resource. NodePool + resource name' + type: string + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing + this value recreates the resource. Service name + type: string + template: + description: Node pool template + items: + properties: + metadata: + description: Metadata of each node in the pool metadata + items: + properties: + annotations: + additionalProperties: + type: string + description: Annotations to apply to each node annotations + type: object + finalizers: + description: Finalizers to apply to each node. A finalizer + name must be fully qualified, e.g. kubernetes.io/pv-protection + , where you prefix it with hostname of your service + which is related to the controller responsible for + the finalizer. finalizers + items: + type: string + type: array + labels: + additionalProperties: + type: string + description: Labels to apply to each node labels + type: object + type: object + type: array + spec: + description: Spec of each node in the pool spec + items: + properties: + taints: + description: Taints to apply to each node taints + items: + additionalProperties: + type: string + type: object + type: array + unschedulable: + description: If true, set nodes as un-schedulable + unschedulable + type: boolean + type: object + type: array + type: object + type: array + type: object + managementPolicies: + default: + - '*' + description: 'THIS IS A BETA FIELD. It is on by default but can be + opted out through a Crossplane feature flag. ManagementPolicies + specify the array of actions Crossplane is allowed to take on the + managed and external resources. This field is planned to replace + the DeletionPolicy field in a future release. Currently, both could + be set independently and non-default values would be honored if + the feature flag is enabled. If both are custom, the DeletionPolicy + field will be ignored. See the design doc for more information: + https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md' + items: + description: A ManagementAction represents an action that the Crossplane + controllers can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: ProviderConfigReference specifies how the provider that + will be used to create, observe, update, and delete this managed + resource should be configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of this + reference is required. The default is 'Required', which + means the reconcile will fail if the reference cannot be + resolved. 'Optional' means this reference will be a no-op + if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will attempt + to resolve the reference only when the corresponding field + is not present. Use 'Always' to resolve the reference on + every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: PublishConnectionDetailsTo specifies the connection secret + config which contains a name, metadata and a reference to secret + store config to which any connection details for this managed resource + should be written. Connection details frequently include the endpoint, + username, and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: SecretStoreConfigRef specifies which secret store + config should be used for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: Annotations are the annotations to be added to + connection secret. - For Kubernetes secrets, this will be + used as "metadata.annotations". - It is up to Secret Store + implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: Labels are the labels/tags to be added to connection + secret. - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store + types. + type: object + type: + description: Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: WriteConnectionSecretToReference specifies the namespace + and name of a Secret to which any connection details for this managed + resource should be written. Connection details frequently include + the endpoint, username, and password required to connect to the + managed resource. This field is planned to be replaced in a future + release in favor of PublishConnectionDetailsTo. Currently, both + could be set independently and connection details would be published + to both without affecting each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + x-kubernetes-validations: + - message: spec.forProvider.flavorName is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.flavorName) + || (has(self.initProvider) && has(self.initProvider.flavorName))' + - message: spec.forProvider.serviceName is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.serviceName) + || (has(self.initProvider) && has(self.initProvider.serviceName))' + status: + description: NodePoolStatus defines the observed state of NodePool. + properties: + atProvider: + properties: + antiAffinity: + description: should the pool use the anti-affinity feature. Default + to false. Changing this value recreates the resource. Enable + anti affinity groups for nodes in the pool + type: boolean + autoscale: + description: Enable auto-scaling for the pool. Default to false. + Enable auto-scaling for the pool + type: boolean + availableNodes: + description: Number of nodes which are actually ready in the pool + Number of nodes which are actually ready in the pool + type: number + createdAt: + description: Creation date Creation date + type: string + currentNodes: + description: Number of nodes present in the pool Number of nodes + present in the pool + type: number + desiredNodes: + description: number of nodes to start. Number of nodes you desire + in the pool + type: number + flavor: + description: Flavor name Flavor name + type: string + flavorName: + description: 'a valid OVHcloud public cloud flavor ID in which + the nodes will be started. Ex: "b2-7". You can find the list + of flavor IDs: https://www.ovhcloud.com/fr/public-cloud/prices/. + Changing this value recreates the resource. Flavor name' + type: string + id: + type: string + kubeId: + description: The id of the managed kubernetes cluster. Changing + this value recreates the resource. Kube ID + type: string + maxNodes: + description: maximum number of nodes allowed in the pool. Setting + desired_nodes over this value will raise an error. Number of + nodes you desire in the pool + type: number + minNodes: + description: minimum number of nodes allowed in the pool. Setting + desired_nodes under this value will raise an error. Number of + nodes you desire in the pool + type: number + monthlyBilled: + description: should the nodes be billed on a monthly basis. Default + to false. Changing this value recreates the resource. Enable + monthly billing on all nodes in the pool + type: boolean + name: + description: 'The name of the nodepool. Warning: _ char is not + allowed! Changing this value recreates the resource. NodePool + resource name' + type: string + projectId: + description: Project id Project id + type: string + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Changing + this value recreates the resource. Service name + type: string + sizeStatus: + description: Status describing the state between number of nodes + wanted and available ones Status describing the state between + number of nodes wanted and available ones + type: string + status: + description: Current status Current status + type: string + template: + description: Node pool template + items: + properties: + metadata: + description: Metadata of each node in the pool metadata + items: + properties: + annotations: + additionalProperties: + type: string + description: Annotations to apply to each node annotations + type: object + finalizers: + description: Finalizers to apply to each node. A finalizer + name must be fully qualified, e.g. kubernetes.io/pv-protection + , where you prefix it with hostname of your service + which is related to the controller responsible for + the finalizer. finalizers + items: + type: string + type: array + labels: + additionalProperties: + type: string + description: Labels to apply to each node labels + type: object + type: object + type: array + spec: + description: Spec of each node in the pool spec + items: + properties: + taints: + description: Taints to apply to each node taints + items: + additionalProperties: + type: string + type: object + type: array + unschedulable: + description: If true, set nodes as un-schedulable + unschedulable + type: boolean + type: object + type: array + type: object + type: array + upToDateNodes: + description: Number of nodes with the latest version installed + in the pool Number of nodes with latest version installed in + the pool + type: number + updatedAt: + description: Last update date Last update date + type: string + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time this condition + transitioned from one status to another. + format: date-time + type: string + message: + description: A Message containing details about this condition's + last transition from one status to another, if any. + type: string + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: Type of this condition. At most one of each condition + type may apply to a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/package/crds/template.upbound.io_providerconfigs.yaml b/package/crds/ovh.saagie.io_providerconfigs.yaml similarity index 97% rename from package/crds/template.upbound.io_providerconfigs.yaml rename to package/crds/ovh.saagie.io_providerconfigs.yaml index 595fa90..64f7957 100644 --- a/package/crds/template.upbound.io_providerconfigs.yaml +++ b/package/crds/ovh.saagie.io_providerconfigs.yaml @@ -4,14 +4,14 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.13.0 - name: providerconfigs.template.upbound.io + name: providerconfigs.ovh.saagie.io spec: - group: template.upbound.io + group: ovh.saagie.io names: categories: - crossplane - provider - - template + - ovh kind: ProviderConfig listKind: ProviderConfigList plural: providerconfigs @@ -29,7 +29,7 @@ spec: name: v1beta1 schema: openAPIV3Schema: - description: A ProviderConfig configures a Template provider. + description: A ProviderConfig configures a Ovh provider. properties: apiVersion: description: 'APIVersion defines the versioned schema of this representation diff --git a/package/crds/template.upbound.io_providerconfigusages.yaml b/package/crds/ovh.saagie.io_providerconfigusages.yaml similarity index 97% rename from package/crds/template.upbound.io_providerconfigusages.yaml rename to package/crds/ovh.saagie.io_providerconfigusages.yaml index 5a2bc1d..98151a6 100644 --- a/package/crds/template.upbound.io_providerconfigusages.yaml +++ b/package/crds/ovh.saagie.io_providerconfigusages.yaml @@ -4,14 +4,14 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.13.0 - name: providerconfigusages.template.upbound.io + name: providerconfigusages.ovh.saagie.io spec: - group: template.upbound.io + group: ovh.saagie.io names: categories: - crossplane - provider - - template + - ovh kind: ProviderConfigUsage listKind: ProviderConfigUsageList plural: providerconfigusages diff --git a/package/crds/template.upbound.io_storeconfigs.yaml b/package/crds/ovh.saagie.io_storeconfigs.yaml similarity index 99% rename from package/crds/template.upbound.io_storeconfigs.yaml rename to package/crds/ovh.saagie.io_storeconfigs.yaml index 4300dad..6bb9866 100644 --- a/package/crds/template.upbound.io_storeconfigs.yaml +++ b/package/crds/ovh.saagie.io_storeconfigs.yaml @@ -4,9 +4,9 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.13.0 - name: storeconfigs.template.upbound.io + name: storeconfigs.ovh.saagie.io spec: - group: template.upbound.io + group: ovh.saagie.io names: categories: - crossplane diff --git a/package/crds/user.cloud.ovh.saagie.io_s3credentials.yaml b/package/crds/user.cloud.ovh.saagie.io_s3credentials.yaml new file mode 100644 index 0000000..d781138 --- /dev/null +++ b/package/crds/user.cloud.ovh.saagie.io_s3credentials.yaml @@ -0,0 +1,394 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + name: s3credentials.user.cloud.ovh.saagie.io +spec: + group: user.cloud.ovh.saagie.io + names: + categories: + - crossplane + - managed + - ovh + kind: S3Credentials + listKind: S3CredentialsList + plural: s3credentials + singular: s3credentials + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: S3Credentials is the Schema for the S3Credentialss API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: S3CredentialsSpec defines the desired state of S3Credentials + properties: + deletionPolicy: + default: Delete + description: 'DeletionPolicy specifies what will happen to the underlying + external when this managed resource is deleted - either "Delete" + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicies field in a future release. Currently, + both could be set independently and non-default values would be + honored if the feature flag is enabled. See the design doc for more + information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223' + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + serviceName: + description: Service name of the resource representing the ID + of the cloud project. + type: string + userId: + description: The user ID + type: string + userIdRef: + description: Reference to a User in user to populate userId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + userIdSelector: + description: Selector for a User in user to populate userId. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + type: object + initProvider: + description: THIS IS A BETA FIELD. It will be honored unless the Management + Policies feature flag is disabled. InitProvider holds the same fields + as ForProvider, with the exception of Identifier and other resource + reference fields. The fields that are in InitProvider are merged + into ForProvider when the resource is created. The same fields are + also added to the terraform ignore_changes hook, to avoid updating + them after creation. This is useful for fields that are required + on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, + like an autoscaler. + properties: + serviceName: + description: Service name of the resource representing the ID + of the cloud project. + type: string + type: object + managementPolicies: + default: + - '*' + description: 'THIS IS A BETA FIELD. It is on by default but can be + opted out through a Crossplane feature flag. ManagementPolicies + specify the array of actions Crossplane is allowed to take on the + managed and external resources. This field is planned to replace + the DeletionPolicy field in a future release. Currently, both could + be set independently and non-default values would be honored if + the feature flag is enabled. If both are custom, the DeletionPolicy + field will be ignored. See the design doc for more information: + https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md' + items: + description: A ManagementAction represents an action that the Crossplane + controllers can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: ProviderConfigReference specifies how the provider that + will be used to create, observe, update, and delete this managed + resource should be configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of this + reference is required. The default is 'Required', which + means the reconcile will fail if the reference cannot be + resolved. 'Optional' means this reference will be a no-op + if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will attempt + to resolve the reference only when the corresponding field + is not present. Use 'Always' to resolve the reference on + every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: PublishConnectionDetailsTo specifies the connection secret + config which contains a name, metadata and a reference to secret + store config to which any connection details for this managed resource + should be written. Connection details frequently include the endpoint, + username, and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: SecretStoreConfigRef specifies which secret store + config should be used for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: Annotations are the annotations to be added to + connection secret. - For Kubernetes secrets, this will be + used as "metadata.annotations". - It is up to Secret Store + implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: Labels are the labels/tags to be added to connection + secret. - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store + types. + type: object + type: + description: Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: WriteConnectionSecretToReference specifies the namespace + and name of a Secret to which any connection details for this managed + resource should be written. Connection details frequently include + the endpoint, username, and password required to connect to the + managed resource. This field is planned to be replaced in a future + release in favor of PublishConnectionDetailsTo. Currently, both + could be set independently and connection details would be published + to both without affecting each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + x-kubernetes-validations: + - message: spec.forProvider.serviceName is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.serviceName) + || (has(self.initProvider) && has(self.initProvider.serviceName))' + status: + description: S3CredentialsStatus defines the observed state of S3Credentials. + properties: + atProvider: + properties: + accessKeyId: + type: string + id: + type: string + internalUserId: + type: string + serviceName: + description: Service name of the resource representing the ID + of the cloud project. + type: string + userId: + description: The user ID + type: string + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time this condition + transitioned from one status to another. + format: date-time + type: string + message: + description: A Message containing details about this condition's + last transition from one status to another, if any. + type: string + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: Type of this condition. At most one of each condition + type may apply to a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/package/crds/user.cloud.ovh.saagie.io_s3policies.yaml b/package/crds/user.cloud.ovh.saagie.io_s3policies.yaml new file mode 100644 index 0000000..a0d9802 --- /dev/null +++ b/package/crds/user.cloud.ovh.saagie.io_s3policies.yaml @@ -0,0 +1,414 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + name: s3policies.user.cloud.ovh.saagie.io +spec: + group: user.cloud.ovh.saagie.io + names: + categories: + - crossplane + - managed + - ovh + kind: S3Policy + listKind: S3PolicyList + plural: s3policies + singular: s3policy + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: S3Policy is the Schema for the S3Policys API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: S3PolicySpec defines the desired state of S3Policy + properties: + deletionPolicy: + default: Delete + description: 'DeletionPolicy specifies what will happen to the underlying + external when this managed resource is deleted - either "Delete" + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicies field in a future release. Currently, + both could be set independently and non-default values would be + honored if the feature flag is enabled. See the design doc for more + information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223' + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + policy: + description: The policy document. This is a JSON formatted string. + See examples of policies on public documentation. The policy + document. This is a JSON formatted string. + type: string + serviceName: + description: The ID of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Service + name of the resource representing the ID of the cloud project. + type: string + userId: + description: The ID of a public cloud project's user. The user + ID + type: string + userIdRef: + description: Reference to a User in user to populate userId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + userIdSelector: + description: Selector for a User in user to populate userId. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + type: object + initProvider: + description: THIS IS A BETA FIELD. It will be honored unless the Management + Policies feature flag is disabled. InitProvider holds the same fields + as ForProvider, with the exception of Identifier and other resource + reference fields. The fields that are in InitProvider are merged + into ForProvider when the resource is created. The same fields are + also added to the terraform ignore_changes hook, to avoid updating + them after creation. This is useful for fields that are required + on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, + like an autoscaler. + properties: + policy: + description: The policy document. This is a JSON formatted string. + See examples of policies on public documentation. The policy + document. This is a JSON formatted string. + type: string + serviceName: + description: The ID of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Service + name of the resource representing the ID of the cloud project. + type: string + type: object + managementPolicies: + default: + - '*' + description: 'THIS IS A BETA FIELD. It is on by default but can be + opted out through a Crossplane feature flag. ManagementPolicies + specify the array of actions Crossplane is allowed to take on the + managed and external resources. This field is planned to replace + the DeletionPolicy field in a future release. Currently, both could + be set independently and non-default values would be honored if + the feature flag is enabled. If both are custom, the DeletionPolicy + field will be ignored. See the design doc for more information: + https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md' + items: + description: A ManagementAction represents an action that the Crossplane + controllers can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: ProviderConfigReference specifies how the provider that + will be used to create, observe, update, and delete this managed + resource should be configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of this + reference is required. The default is 'Required', which + means the reconcile will fail if the reference cannot be + resolved. 'Optional' means this reference will be a no-op + if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will attempt + to resolve the reference only when the corresponding field + is not present. Use 'Always' to resolve the reference on + every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: PublishConnectionDetailsTo specifies the connection secret + config which contains a name, metadata and a reference to secret + store config to which any connection details for this managed resource + should be written. Connection details frequently include the endpoint, + username, and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: SecretStoreConfigRef specifies which secret store + config should be used for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: Annotations are the annotations to be added to + connection secret. - For Kubernetes secrets, this will be + used as "metadata.annotations". - It is up to Secret Store + implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: Labels are the labels/tags to be added to connection + secret. - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store + types. + type: object + type: + description: Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: WriteConnectionSecretToReference specifies the namespace + and name of a Secret to which any connection details for this managed + resource should be written. Connection details frequently include + the endpoint, username, and password required to connect to the + managed resource. This field is planned to be replaced in a future + release in favor of PublishConnectionDetailsTo. Currently, both + could be set independently and connection details would be published + to both without affecting each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + x-kubernetes-validations: + - message: spec.forProvider.policy is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.policy) + || (has(self.initProvider) && has(self.initProvider.policy))' + - message: spec.forProvider.serviceName is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.serviceName) + || (has(self.initProvider) && has(self.initProvider.serviceName))' + status: + description: S3PolicyStatus defines the observed state of S3Policy. + properties: + atProvider: + properties: + id: + type: string + policy: + description: The policy document. This is a JSON formatted string. + See examples of policies on public documentation. The policy + document. This is a JSON formatted string. + type: string + serviceName: + description: The ID of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Service + name of the resource representing the ID of the cloud project. + type: string + userId: + description: The ID of a public cloud project's user. The user + ID + type: string + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time this condition + transitioned from one status to another. + format: date-time + type: string + message: + description: A Message containing details about this condition's + last transition from one status to another, if any. + type: string + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: Type of this condition. At most one of each condition + type may apply to a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/package/crds/null.template.upbound.io_resources.yaml b/package/crds/user.cloud.ovh.saagie.io_users.yaml similarity index 73% rename from package/crds/null.template.upbound.io_resources.yaml rename to package/crds/user.cloud.ovh.saagie.io_users.yaml index 04973c1..0e295cc 100644 --- a/package/crds/null.template.upbound.io_resources.yaml +++ b/package/crds/user.cloud.ovh.saagie.io_users.yaml @@ -4,18 +4,18 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.13.0 - name: resources.null.template.upbound.io + name: users.user.cloud.ovh.saagie.io spec: - group: null.template.upbound.io + group: user.cloud.ovh.saagie.io names: categories: - crossplane - managed - - template - kind: Resource - listKind: ResourceList - plural: resources - singular: resource + - ovh + kind: User + listKind: UserList + plural: users + singular: user scope: Cluster versions: - additionalPrinterColumns: @@ -34,10 +34,7 @@ spec: name: v1alpha1 schema: openAPIV3Schema: - description: Resource is the Schema for the Resources API. The null_resource - resource implements the standard resource lifecycle but takes no further - action. The triggers argument allows specifying an arbitrary set of values - that, when changed, will cause the resource to be replaced. + description: User is the Schema for the Users API. properties: apiVersion: description: 'APIVersion defines the versioned schema of this representation @@ -52,7 +49,7 @@ spec: metadata: type: object spec: - description: ResourceSpec defines the desired state of Resource + description: UserSpec defines the desired state of User properties: deletionPolicy: default: Delete @@ -69,13 +66,28 @@ spec: type: string forProvider: properties: - triggers: + description: + description: A description associated with the user. + type: string + openstackRc: additionalProperties: type: string - description: A map of arbitrary strings that, when changed, will - force the null resource to be replaced, re-running any associated - provisioners. + description: 'a convenient map representing an openstack_rc file. + Note: no password nor sensitive token is set in this map.' type: object + roleName: + description: The name of a role. See role_names. + type: string + roleNames: + description: 'A list of role names. Values can be:' + items: + type: string + type: array + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Service + name of the resource representing the id of the cloud project. + type: string type: object initProvider: description: THIS IS A BETA FIELD. It will be honored unless the Management @@ -89,13 +101,28 @@ spec: for example because of an external controller is managing them, like an autoscaler. properties: - triggers: + description: + description: A description associated with the user. + type: string + openstackRc: additionalProperties: type: string - description: A map of arbitrary strings that, when changed, will - force the null resource to be replaced, re-running any associated - provisioners. + description: 'a convenient map representing an openstack_rc file. + Note: no password nor sensitive token is set in this map.' type: object + roleName: + description: The name of a role. See role_names. + type: string + roleNames: + description: 'A list of role names. Values can be:' + items: + type: string + type: array + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Service + name of the resource representing the id of the cloud project. + type: string type: object managementPolicies: default: @@ -257,20 +284,72 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.serviceName is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.serviceName) + || (has(self.initProvider) && has(self.initProvider.serviceName))' status: - description: ResourceStatus defines the observed state of Resource. + description: UserStatus defines the observed state of User. properties: atProvider: properties: + creationDate: + description: the date the user was created. + type: string + description: + description: A description associated with the user. + type: string id: + description: id of the role type: string - triggers: + openstackRc: additionalProperties: type: string - description: A map of arbitrary strings that, when changed, will - force the null resource to be replaced, re-running any associated - provisioners. + description: 'a convenient map representing an openstack_rc file. + Note: no password nor sensitive token is set in this map.' type: object + roleName: + description: The name of a role. See role_names. + type: string + roleNames: + description: 'A list of role names. Values can be:' + items: + type: string + type: array + roles: + description: A list of roles associated with the user. + items: + properties: + description: + description: A description associated with the user. + type: string + id: + description: id of the role + type: string + name: + description: name of the role + type: string + permissions: + description: list of permissions associated with the role + items: + type: string + type: array + type: object + type: array + serviceName: + description: The id of the public cloud project. If omitted, the + OVH_CLOUD_PROJECT_SERVICE environment variable is used. Service + name of the resource representing the id of the cloud project. + type: string + status: + description: the status of the user. should be normally set to + 'ok'. + type: string + username: + description: the username generated for the user. This username + can be used with the Openstack API. + type: string type: object conditions: description: Conditions of the resource. diff --git a/package/crossplane.yaml b/package/crossplane.yaml index 8e70739..d795a2f 100644 --- a/package/crossplane.yaml +++ b/package/crossplane.yaml @@ -1,4 +1,4 @@ -apiVersion: meta.pkg.crossplane.io/v1 +apiVersion: meta.pkg.crossplane.io/v1alpha1 kind: Provider metadata: - name: upjet-provider-template + name: provider-ovh