From a383faec916ae241c99cbba481096406cb878e30 Mon Sep 17 00:00:00 2001 From: Evan Johnson Date: Fri, 5 May 2023 14:50:16 -0400 Subject: [PATCH] bump crossplane tools/runtime and update linode terraform version to 2.00 --- Makefile | 4 +- .../v1alpha1/zz_accesscontrols_types.go | 32 +- .../v1alpha1/zz_generated.deepcopy.go | 280 ++++++ .../database/v1alpha1/zz_generated.managed.go | 40 + apis/database/v1alpha1/zz_mongodb_types.go | 87 +- apis/database/v1alpha1/zz_mysql_types.go | 83 +- apis/database/v1alpha1/zz_postgresql_types.go | 87 +- apis/domain/v1alpha1/zz_domain_types.go | 54 +- apis/domain/v1alpha1/zz_generated.deepcopy.go | 138 +++ apis/domain/v1alpha1/zz_generated.managed.go | 20 + apis/domain/v1alpha1/zz_record_types.go | 59 +- apis/firewall/v1alpha1/zz_device_types.go | 12 + apis/firewall/v1alpha1/zz_firewall_types.go | 97 +- .../v1alpha1/zz_generated.deepcopy.go | 155 ++++ .../firewall/v1alpha1/zz_generated.managed.go | 20 + apis/image/v1alpha1/zz_generated.deepcopy.go | 35 + apis/image/v1alpha1/zz_generated.managed.go | 10 + apis/image/v1alpha1/zz_image_types.go | 37 +- apis/instance/v1alpha1/zz_config_types.go | 176 +++- apis/instance/v1alpha1/zz_disk_types.go | 46 +- .../v1alpha1/zz_generated.deepcopy.go | 841 +++++++++++++++++- .../instance/v1alpha1/zz_generated.managed.go | 50 ++ apis/instance/v1alpha1/zz_instance_types.go | 344 ++++++- apis/instance/v1alpha1/zz_ip_types.go | 16 + apis/instance/v1alpha1/zz_sharedips_types.go | 18 +- apis/ipv6/v1alpha1/zz_generated.deepcopy.go | 15 + apis/ipv6/v1alpha1/zz_generated.managed.go | 10 + apis/ipv6/v1alpha1/zz_ipv6range_types.go | 21 +- apis/lke/v1alpha1/zz_cluster_types.go | 67 +- apis/lke/v1alpha1/zz_generated.deepcopy.go | 65 ++ apis/lke/v1alpha1/zz_generated.managed.go | 10 + apis/nodebalancer/v1alpha1/zz_config_types.go | 56 ++ .../v1alpha1/zz_generated.deepcopy.go | 126 +++ .../v1alpha1/zz_generated.managed.go | 30 + apis/nodebalancer/v1alpha1/zz_node_types.go | 39 +- .../v1alpha1/zz_nodebalancer_types.go | 25 +- .../objectstorage/v1alpha1/zz_bucket_types.go | 86 +- .../v1alpha1/zz_generated.deepcopy.go | 228 +++++ .../v1alpha1/zz_generated.managed.go | 30 + apis/objectstorage/v1alpha1/zz_key_types.go | 30 +- .../objectstorage/v1alpha1/zz_object_types.go | 92 +- apis/rdns/v1alpha1/zz_generated.deepcopy.go | 15 + apis/rdns/v1alpha1/zz_generated.managed.go | 10 + apis/rdns/v1alpha1/zz_rdns_types.go | 27 +- apis/sshkey/v1alpha1/zz_generated.deepcopy.go | 10 + apis/sshkey/v1alpha1/zz_generated.managed.go | 10 + apis/sshkey/v1alpha1/zz_sshkey_types.go | 22 +- .../v1alpha1/zz_generated.deepcopy.go | 73 ++ .../v1alpha1/zz_generated.managed.go | 10 + .../v1alpha1/zz_stackscript_types.go | 70 +- apis/token/v1alpha1/zz_generated.deepcopy.go | 15 + apis/token/v1alpha1/zz_generated.managed.go | 10 + apis/token/v1alpha1/zz_token_types.go | 25 +- apis/user/v1alpha1/zz_generated.deepcopy.go | 218 +++++ apis/user/v1alpha1/zz_generated.managed.go | 10 + apis/user/v1alpha1/zz_user_types.go | 171 +++- apis/volume/v1alpha1/zz_generated.deepcopy.go | 36 + apis/volume/v1alpha1/zz_generated.managed.go | 10 + apis/volume/v1alpha1/zz_volume_types.go | 33 +- config/provider-metadata.yaml | 19 + config/schema.json | 2 +- examples/install.yaml | 2 +- go.mod | 89 +- go.sum | 198 +++-- .../database/accesscontrols/zz_controller.go | 10 +- .../database/mongodb/zz_controller.go | 10 +- .../database/mysql/zz_controller.go | 10 +- .../database/postgresql/zz_controller.go | 10 +- .../controller/domain/domain/zz_controller.go | 10 +- .../controller/domain/record/zz_controller.go | 10 +- .../firewall/device/zz_controller.go | 10 +- .../firewall/firewall/zz_controller.go | 10 +- .../controller/image/image/zz_controller.go | 10 +- .../instance/config/zz_controller.go | 10 +- .../controller/instance/disk/zz_controller.go | 10 +- .../instance/instance/zz_controller.go | 10 +- .../controller/instance/ip/zz_controller.go | 10 +- .../instance/sharedips/zz_controller.go | 10 +- .../ipv6/ipv6range/zz_controller.go | 10 +- .../controller/lke/cluster/zz_controller.go | 10 +- .../nodebalancer/config/zz_controller.go | 10 +- .../nodebalancer/node/zz_controller.go | 10 +- .../nodebalancer/zz_controller.go | 10 +- .../objectstorage/bucket/zz_controller.go | 10 +- .../objectstorage/key/zz_controller.go | 10 +- .../objectstorage/object/zz_controller.go | 10 +- .../controller/rdns/rdns/zz_controller.go | 10 +- .../controller/sshkey/sshkey/zz_controller.go | 10 +- .../stackscript/stackscript/zz_controller.go | 10 +- .../controller/token/token/zz_controller.go | 10 +- .../controller/user/user/zz_controller.go | 10 +- .../controller/volume/volume/zz_controller.go | 10 +- ...base.linode.upbound.io_accesscontrols.yaml | 60 +- .../database.linode.upbound.io_mongodbs.yaml | 130 ++- .../database.linode.upbound.io_mysqls.yaml | 125 ++- ...atabase.linode.upbound.io_postgresqls.yaml | 134 ++- .../domain.linode.upbound.io_domains.yaml | 113 ++- .../domain.linode.upbound.io_records.yaml | 111 ++- .../firewall.linode.upbound.io_devices.yaml | 43 +- .../firewall.linode.upbound.io_firewalls.yaml | 166 +++- .../crds/image.linode.upbound.io_images.yaml | 66 +- .../instance.linode.upbound.io_configs.yaml | 273 +++++- .../instance.linode.upbound.io_disks.yaml | 83 +- .../instance.linode.upbound.io_instances.yaml | 801 +++++++++++++++-- .../crds/instance.linode.upbound.io_ips.yaml | 48 +- .../instance.linode.upbound.io_sharedips.yaml | 46 +- .../ipv6.linode.upbound.io_ipv6ranges.yaml | 49 +- .../linode.upbound.io_providerconfigs.yaml | 8 +- ...inode.upbound.io_providerconfigusages.yaml | 8 +- .../crds/linode.upbound.io_storeconfigs.yaml | 41 +- .../crds/lke.linode.upbound.io_clusters.yaml | 104 ++- ...odebalancer.linode.upbound.io_configs.yaml | 131 ++- ...ancer.linode.upbound.io_nodebalancers.yaml | 57 +- .../nodebalancer.linode.upbound.io_nodes.yaml | 79 +- ...jectstorage.linode.upbound.io_buckets.yaml | 184 +++- .../objectstorage.linode.upbound.io_keys.yaml | 67 +- ...jectstorage.linode.upbound.io_objects.yaml | 131 ++- package/crds/rdns.linode.upbound.io_rdns.yaml | 54 +- .../sshkey.linode.upbound.io_sshkeys.yaml | 49 +- ...script.linode.upbound.io_stackscripts.yaml | 112 ++- .../crds/token.linode.upbound.io_tokens.yaml | 75 +- .../crds/user.linode.upbound.io_users.yaml | 235 ++++- .../volume.linode.upbound.io_volumes.yaml | 65 +- 123 files changed, 7786 insertions(+), 898 deletions(-) diff --git a/Makefile b/Makefile index e457c5c..f39f149 100644 --- a/Makefile +++ b/Makefile @@ -6,9 +6,9 @@ PROJECT_REPO := github.com/linode/$(PROJECT_NAME) export TERRAFORM_VERSION := 1.3.3 export TERRAFORM_PROVIDER_SOURCE := linode/linode -export TERRAFORM_PROVIDER_VERSION := 1.30.0 +export TERRAFORM_PROVIDER_VERSION := 2.0.0 export TERRAFORM_PROVIDER_DOWNLOAD_NAME := terraform-provider-linode -export TERRAFORM_NATIVE_PROVIDER_BINARY := terraform-provider-linode_v1.30.0 +export TERRAFORM_NATIVE_PROVIDER_BINARY := terraform-provider-linode_v2.0.0 export TERRAFORM_PROVIDER_REPO := https://github.com/linode/terraform-provider-linode export TERRAFORM_DOCS_PATH := website/docs/r diff --git a/apis/database/v1alpha1/zz_accesscontrols_types.go b/apis/database/v1alpha1/zz_accesscontrols_types.go index baace4c..e8cab4a 100755 --- a/apis/database/v1alpha1/zz_accesscontrols_types.go +++ b/apis/database/v1alpha1/zz_accesscontrols_types.go @@ -14,6 +14,19 @@ import ( ) type AccessControlsObservation struct { + + // A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format. + // A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format. + AllowList []*string `json:"allowList,omitempty" tf:"allow_list,omitempty"` + + // The unique ID of the target database. + // The ID of the database to manage the allow list for. + DatabaseID *float64 `json:"databaseId,omitempty" tf:"database_id,omitempty"` + + // The unique type of the target database. (mysql, mongodb, postgresql) + // The type of the database to manage the allow list for. + DatabaseType *string `json:"databaseType,omitempty" tf:"database_type,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` } @@ -21,18 +34,18 @@ type AccessControlsParameters struct { // A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format. // A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format. - // +kubebuilder:validation:Required - AllowList []*string `json:"allowList" tf:"allow_list,omitempty"` + // +kubebuilder:validation:Optional + AllowList []*string `json:"allowList,omitempty" tf:"allow_list,omitempty"` // The unique ID of the target database. // The ID of the database to manage the allow list for. - // +kubebuilder:validation:Required - DatabaseID *float64 `json:"databaseId" tf:"database_id,omitempty"` + // +kubebuilder:validation:Optional + DatabaseID *float64 `json:"databaseId,omitempty" tf:"database_id,omitempty"` // The unique type of the target database. (mysql, mongodb, postgresql) // The type of the database to manage the allow list for. - // +kubebuilder:validation:Required - DatabaseType *string `json:"databaseType" tf:"database_type,omitempty"` + // +kubebuilder:validation:Optional + DatabaseType *string `json:"databaseType,omitempty" tf:"database_type,omitempty"` } // AccessControlsSpec defines the desired state of AccessControls @@ -59,8 +72,11 @@ type AccessControlsStatus struct { type AccessControls struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec AccessControlsSpec `json:"spec"` - Status AccessControlsStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.allowList)",message="allowList is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.databaseId)",message="databaseId is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.databaseType)",message="databaseType is a required parameter" + Spec AccessControlsSpec `json:"spec"` + Status AccessControlsStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/database/v1alpha1/zz_generated.deepcopy.go b/apis/database/v1alpha1/zz_generated.deepcopy.go index eac7680..a0de787 100644 --- a/apis/database/v1alpha1/zz_generated.deepcopy.go +++ b/apis/database/v1alpha1/zz_generated.deepcopy.go @@ -75,6 +75,27 @@ func (in *AccessControlsList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AccessControlsObservation) DeepCopyInto(out *AccessControlsObservation) { *out = *in + if in.AllowList != nil { + in, out := &in.AllowList, &out.AllowList + *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.DatabaseID != nil { + in, out := &in.DatabaseID, &out.DatabaseID + *out = new(float64) + **out = **in + } + if in.DatabaseType != nil { + in, out := &in.DatabaseType, &out.DatabaseType + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) @@ -224,16 +245,47 @@ func (in *MongoDBList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MongoDBObservation) DeepCopyInto(out *MongoDBObservation) { *out = *in + if in.AllowList != nil { + in, out := &in.AllowList, &out.AllowList + *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.ClusterSize != nil { + in, out := &in.ClusterSize, &out.ClusterSize + *out = new(float64) + **out = **in + } + if in.CompressionType != nil { + in, out := &in.CompressionType, &out.CompressionType + *out = new(string) + **out = **in + } if in.Created != nil { in, out := &in.Created, &out.Created *out = new(string) **out = **in } + if in.Encrypted != nil { + in, out := &in.Encrypted, &out.Encrypted + *out = new(bool) + **out = **in + } if in.Engine != nil { in, out := &in.Engine, &out.Engine *out = new(string) **out = **in } + if in.EngineID != nil { + in, out := &in.EngineID, &out.EngineID + *out = new(string) + **out = **in + } if in.HostPrimary != nil { in, out := &in.HostPrimary, &out.HostPrimary *out = new(string) @@ -249,6 +301,11 @@ func (in *MongoDBObservation) DeepCopyInto(out *MongoDBObservation) { *out = new(string) **out = **in } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } if in.Peers != nil { in, out := &in.Peers, &out.Peers *out = make([]*string, len(*in)) @@ -265,21 +322,48 @@ func (in *MongoDBObservation) DeepCopyInto(out *MongoDBObservation) { *out = new(float64) **out = **in } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } if in.ReplicaSet != nil { in, out := &in.ReplicaSet, &out.ReplicaSet *out = new(string) **out = **in } + if in.SSLConnection != nil { + in, out := &in.SSLConnection, &out.SSLConnection + *out = new(bool) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) **out = **in } + if in.StorageEngine != nil { + in, out := &in.StorageEngine, &out.StorageEngine + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } if in.Updated != nil { in, out := &in.Updated, &out.Updated *out = new(string) **out = **in } + if in.Updates != nil { + in, out := &in.Updates, &out.Updates + *out = make([]UpdatesObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Version != nil { in, out := &in.Version, &out.Version *out = new(string) @@ -471,16 +555,42 @@ func (in *MySQLList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MySQLObservation) DeepCopyInto(out *MySQLObservation) { *out = *in + if in.AllowList != nil { + in, out := &in.AllowList, &out.AllowList + *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.ClusterSize != nil { + in, out := &in.ClusterSize, &out.ClusterSize + *out = new(float64) + **out = **in + } if in.Created != nil { in, out := &in.Created, &out.Created *out = new(string) **out = **in } + if in.Encrypted != nil { + in, out := &in.Encrypted, &out.Encrypted + *out = new(bool) + **out = **in + } if in.Engine != nil { in, out := &in.Engine, &out.Engine *out = new(string) **out = **in } + if in.EngineID != nil { + in, out := &in.EngineID, &out.EngineID + *out = new(string) + **out = **in + } if in.HostPrimary != nil { in, out := &in.HostPrimary, &out.HostPrimary *out = new(string) @@ -496,16 +606,48 @@ func (in *MySQLObservation) DeepCopyInto(out *MySQLObservation) { *out = new(string) **out = **in } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.ReplicationType != nil { + in, out := &in.ReplicationType, &out.ReplicationType + *out = new(string) + **out = **in + } + if in.SSLConnection != nil { + in, out := &in.SSLConnection, &out.SSLConnection + *out = new(bool) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) **out = **in } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } if in.Updated != nil { in, out := &in.Updated, &out.Updated *out = new(string) **out = **in } + if in.Updates != nil { + in, out := &in.Updates, &out.Updates + *out = make([]MySQLUpdatesObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Version != nil { in, out := &in.Version, &out.Version *out = new(string) @@ -633,6 +775,31 @@ func (in *MySQLStatus) DeepCopy() *MySQLStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MySQLUpdatesObservation) DeepCopyInto(out *MySQLUpdatesObservation) { *out = *in + if in.DayOfWeek != nil { + in, out := &in.DayOfWeek, &out.DayOfWeek + *out = new(string) + **out = **in + } + if in.Duration != nil { + in, out := &in.Duration, &out.Duration + *out = new(float64) + **out = **in + } + if in.Frequency != nil { + in, out := &in.Frequency, &out.Frequency + *out = new(string) + **out = **in + } + if in.HourOfDay != nil { + in, out := &in.HourOfDay, &out.HourOfDay + *out = new(float64) + **out = **in + } + if in.WeekOfMonth != nil { + in, out := &in.WeekOfMonth, &out.WeekOfMonth + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MySQLUpdatesObservation. @@ -747,16 +914,42 @@ func (in *PostgreSQLList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PostgreSQLObservation) DeepCopyInto(out *PostgreSQLObservation) { *out = *in + if in.AllowList != nil { + in, out := &in.AllowList, &out.AllowList + *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.ClusterSize != nil { + in, out := &in.ClusterSize, &out.ClusterSize + *out = new(float64) + **out = **in + } if in.Created != nil { in, out := &in.Created, &out.Created *out = new(string) **out = **in } + if in.Encrypted != nil { + in, out := &in.Encrypted, &out.Encrypted + *out = new(bool) + **out = **in + } if in.Engine != nil { in, out := &in.Engine, &out.Engine *out = new(string) **out = **in } + if in.EngineID != nil { + in, out := &in.EngineID, &out.EngineID + *out = new(string) + **out = **in + } if in.HostPrimary != nil { in, out := &in.HostPrimary, &out.HostPrimary *out = new(string) @@ -772,21 +965,58 @@ func (in *PostgreSQLObservation) DeepCopyInto(out *PostgreSQLObservation) { *out = new(string) **out = **in } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } if in.Port != nil { in, out := &in.Port, &out.Port *out = new(float64) **out = **in } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.ReplicationCommitType != nil { + in, out := &in.ReplicationCommitType, &out.ReplicationCommitType + *out = new(string) + **out = **in + } + if in.ReplicationType != nil { + in, out := &in.ReplicationType, &out.ReplicationType + *out = new(string) + **out = **in + } + if in.SSLConnection != nil { + in, out := &in.SSLConnection, &out.SSLConnection + *out = new(bool) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) **out = **in } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } if in.Updated != nil { in, out := &in.Updated, &out.Updated *out = new(string) **out = **in } + if in.Updates != nil { + in, out := &in.Updates, &out.Updates + *out = make([]PostgreSQLUpdatesObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Version != nil { in, out := &in.Version, &out.Version *out = new(string) @@ -919,6 +1149,31 @@ func (in *PostgreSQLStatus) DeepCopy() *PostgreSQLStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PostgreSQLUpdatesObservation) DeepCopyInto(out *PostgreSQLUpdatesObservation) { *out = *in + if in.DayOfWeek != nil { + in, out := &in.DayOfWeek, &out.DayOfWeek + *out = new(string) + **out = **in + } + if in.Duration != nil { + in, out := &in.Duration, &out.Duration + *out = new(float64) + **out = **in + } + if in.Frequency != nil { + in, out := &in.Frequency, &out.Frequency + *out = new(string) + **out = **in + } + if in.HourOfDay != nil { + in, out := &in.HourOfDay, &out.HourOfDay + *out = new(float64) + **out = **in + } + if in.WeekOfMonth != nil { + in, out := &in.WeekOfMonth, &out.WeekOfMonth + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PostgreSQLUpdatesObservation. @@ -974,6 +1229,31 @@ func (in *PostgreSQLUpdatesParameters) DeepCopy() *PostgreSQLUpdatesParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *UpdatesObservation) DeepCopyInto(out *UpdatesObservation) { *out = *in + if in.DayOfWeek != nil { + in, out := &in.DayOfWeek, &out.DayOfWeek + *out = new(string) + **out = **in + } + if in.Duration != nil { + in, out := &in.Duration, &out.Duration + *out = new(float64) + **out = **in + } + if in.Frequency != nil { + in, out := &in.Frequency, &out.Frequency + *out = new(string) + **out = **in + } + if in.HourOfDay != nil { + in, out := &in.HourOfDay, &out.HourOfDay + *out = new(float64) + **out = **in + } + if in.WeekOfMonth != nil { + in, out := &in.WeekOfMonth, &out.WeekOfMonth + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpdatesObservation. diff --git a/apis/database/v1alpha1/zz_generated.managed.go b/apis/database/v1alpha1/zz_generated.managed.go index e48cefc..3a078d1 100644 --- a/apis/database/v1alpha1/zz_generated.managed.go +++ b/apis/database/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *AccessControls) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this AccessControls. +func (mg *AccessControls) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this AccessControls. func (mg *AccessControls) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *AccessControls) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this AccessControls. +func (mg *AccessControls) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this AccessControls. func (mg *AccessControls) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -83,6 +93,11 @@ func (mg *MongoDB) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this MongoDB. +func (mg *MongoDB) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this MongoDB. func (mg *MongoDB) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -116,6 +131,11 @@ func (mg *MongoDB) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this MongoDB. +func (mg *MongoDB) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this MongoDB. func (mg *MongoDB) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -149,6 +169,11 @@ func (mg *MySQL) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this MySQL. +func (mg *MySQL) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this MySQL. func (mg *MySQL) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -182,6 +207,11 @@ func (mg *MySQL) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this MySQL. +func (mg *MySQL) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this MySQL. func (mg *MySQL) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -215,6 +245,11 @@ func (mg *PostgreSQL) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this PostgreSQL. +func (mg *PostgreSQL) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this PostgreSQL. func (mg *PostgreSQL) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -248,6 +283,11 @@ func (mg *PostgreSQL) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this PostgreSQL. +func (mg *PostgreSQL) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this PostgreSQL. func (mg *PostgreSQL) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/database/v1alpha1/zz_mongodb_types.go b/apis/database/v1alpha1/zz_mongodb_types.go index 2cfa31d..040c116 100755 --- a/apis/database/v1alpha1/zz_mongodb_types.go +++ b/apis/database/v1alpha1/zz_mongodb_types.go @@ -15,14 +15,34 @@ import ( type MongoDBObservation struct { + // A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format. Use linode_database_access_controls to manage your allow list separately. + // A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format. + AllowList []*string `json:"allowList,omitempty" tf:"allow_list,omitempty"` + + // The number of Linode Instance nodes deployed to the Managed Database. (default 1) + // The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1. + ClusterSize *float64 `json:"clusterSize,omitempty" tf:"cluster_size,omitempty"` + + // The type of data compression for this Database. (none, snappy, zlib; default none) + // The type of data compression for this Database. + CompressionType *string `json:"compressionType,omitempty" tf:"compression_type,omitempty"` + // When this Managed Database was created. // When this Managed Database was created. Created *string `json:"created,omitempty" tf:"created,omitempty"` + // Whether the Managed Databases is encrypted. (default false) + // Whether the Managed Databases is encrypted. + Encrypted *bool `json:"encrypted,omitempty" tf:"encrypted,omitempty"` + // The Managed Database engine. (e.g. mongodb) // The Managed Database engine. Engine *string `json:"engine,omitempty" tf:"engine,omitempty"` + // The Managed Database engine in engine/version format. (e.g. mongo/4.4.10) + // The Managed Database engine in engine/version format. (e.g. mongodb/4.4.10) + EngineID *string `json:"engineId,omitempty" tf:"engine_id,omitempty"` + // The primary host for the Managed Database. // The primary host for the Managed Database. HostPrimary *string `json:"hostPrimary,omitempty" tf:"host_primary,omitempty"` @@ -34,6 +54,10 @@ type MongoDBObservation struct { // The ID of the Managed Database. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // A unique, user-defined string referring to the Managed Database. + // A unique, user-defined string referring to the Managed Database. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + // A set of peer addresses for this Database. // A set of peer addresses for this Database. Peers []*string `json:"peers,omitempty" tf:"peers,omitempty"` @@ -42,18 +66,37 @@ type MongoDBObservation struct { // The access port for this Managed Database. Port *float64 `json:"port,omitempty" tf:"port,omitempty"` + // The region to use for the Managed Database. + // The region to use for the Managed Database. + Region *string `json:"region,omitempty" tf:"region,omitempty"` + // Label for configuring a MongoDB replica set. Choose the same label on multiple Databases to include them in the same replica set. // Label for configuring a MongoDB replica set. Choose the same label on multiple Databases to include them in the same replica set. ReplicaSet *string `json:"replicaSet,omitempty" tf:"replica_set,omitempty"` + // Whether to require SSL credentials to establish a connection to the Managed Database. (default false) + // Whether to require SSL credentials to establish a connection to the Managed Database. + SSLConnection *bool `json:"sslConnection,omitempty" tf:"ssl_connection,omitempty"` + // The operating status of the Managed Database. // The operating status of the Managed Database. Status *string `json:"status,omitempty" tf:"status,omitempty"` + // The type of storage engine for this Database. (mmapv1, wiredtiger; default wiredtiger) + // The type of storage engine for this Database. + StorageEngine *string `json:"storageEngine,omitempty" tf:"storage_engine,omitempty"` + + // The Linode Instance type used for the nodes of the Managed Database instance. + // The Linode Instance type used by the Managed Database for its nodes. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + // When this Managed Database was last updated. // When this Managed Database was last updated. Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` + // Configuration settings for automated patch update maintenance for the Managed Database. + Updates []UpdatesObservation `json:"updates,omitempty" tf:"updates,omitempty"` + // The Managed Database engine version. (e.g. v8.0.26) // The Managed Database engine version. Version *string `json:"version,omitempty" tf:"version,omitempty"` @@ -83,18 +126,18 @@ type MongoDBParameters struct { // The Managed Database engine in engine/version format. (e.g. mongo/4.4.10) // The Managed Database engine in engine/version format. (e.g. mongodb/4.4.10) - // +kubebuilder:validation:Required - EngineID *string `json:"engineId" tf:"engine_id,omitempty"` + // +kubebuilder:validation:Optional + EngineID *string `json:"engineId,omitempty" tf:"engine_id,omitempty"` // A unique, user-defined string referring to the Managed Database. // A unique, user-defined string referring to the Managed Database. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // The region to use for the Managed Database. // The region to use for the Managed Database. - // +kubebuilder:validation:Required - Region *string `json:"region" tf:"region,omitempty"` + // +kubebuilder:validation:Optional + Region *string `json:"region,omitempty" tf:"region,omitempty"` // Whether to require SSL credentials to establish a connection to the Managed Database. (default false) // Whether to require SSL credentials to establish a connection to the Managed Database. @@ -108,8 +151,8 @@ type MongoDBParameters struct { // The Linode Instance type used for the nodes of the Managed Database instance. // The Linode Instance type used by the Managed Database for its nodes. - // +kubebuilder:validation:Required - Type *string `json:"type" tf:"type,omitempty"` + // +kubebuilder:validation:Optional + Type *string `json:"type,omitempty" tf:"type,omitempty"` // Configuration settings for automated patch update maintenance for the Managed Database. // +kubebuilder:validation:Optional @@ -117,6 +160,26 @@ type MongoDBParameters struct { } type UpdatesObservation struct { + + // The day to perform maintenance. (monday, tuesday, ...) + // The day to perform maintenance. + DayOfWeek *string `json:"dayOfWeek,omitempty" tf:"day_of_week,omitempty"` + + // The maximum maintenance window time in hours. (1..3) + // The maximum maintenance window time in hours. + Duration *float64 `json:"duration,omitempty" tf:"duration,omitempty"` + + // Whether maintenance occurs on a weekly or monthly basis. (weekly, monthly) + // Whether maintenance occurs on a weekly or monthly basis. + Frequency *string `json:"frequency,omitempty" tf:"frequency,omitempty"` + + // The hour to begin maintenance based in UTC time. (0..23) + // The hour to begin maintenance based in UTC time. + HourOfDay *float64 `json:"hourOfDay,omitempty" tf:"hour_of_day,omitempty"` + + // The week of the month to perform monthly frequency updates. Required for monthly frequency updates. (1..4) + // The week of the month to perform monthly frequency updates. Required for monthly frequency updates. + WeekOfMonth *float64 `json:"weekOfMonth,omitempty" tf:"week_of_month,omitempty"` } type UpdatesParameters struct { @@ -171,8 +234,12 @@ type MongoDBStatus struct { type MongoDB struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec MongoDBSpec `json:"spec"` - Status MongoDBStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.engineId)",message="engineId is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region)",message="region is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.type)",message="type is a required parameter" + Spec MongoDBSpec `json:"spec"` + Status MongoDBStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/database/v1alpha1/zz_mysql_types.go b/apis/database/v1alpha1/zz_mysql_types.go index 32978a1..fa0c6e9 100755 --- a/apis/database/v1alpha1/zz_mysql_types.go +++ b/apis/database/v1alpha1/zz_mysql_types.go @@ -15,14 +15,30 @@ import ( type MySQLObservation struct { + // A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format. Use linode_database_access_controls to manage your allow list separately. + // A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format. + AllowList []*string `json:"allowList,omitempty" tf:"allow_list,omitempty"` + + // The number of Linode Instance nodes deployed to the Managed Database. (default 1) + // The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1. + ClusterSize *float64 `json:"clusterSize,omitempty" tf:"cluster_size,omitempty"` + // When this Managed Database was created. // When this Managed Database was created. Created *string `json:"created,omitempty" tf:"created,omitempty"` + // Whether the Managed Databases is encrypted. (default false) + // Whether the Managed Databases is encrypted. + Encrypted *bool `json:"encrypted,omitempty" tf:"encrypted,omitempty"` + // The Managed Database engine. (e.g. mysql) // The Managed Database engine. Engine *string `json:"engine,omitempty" tf:"engine,omitempty"` + // The Managed Database engine in engine/version format. (e.g. mysql/8.0.26) + // The Managed Database engine in engine/version format. (e.g. mysql/8.0.26) + EngineID *string `json:"engineId,omitempty" tf:"engine_id,omitempty"` + // The primary host for the Managed Database. // The primary host for the Managed Database. HostPrimary *string `json:"hostPrimary,omitempty" tf:"host_primary,omitempty"` @@ -34,14 +50,37 @@ type MySQLObservation struct { // The ID of the Managed Database. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // A unique, user-defined string referring to the Managed Database. + // A unique, user-defined string referring to the Managed Database. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The region to use for the Managed Database. + // The region to use for the Managed Database. + Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // The replication method used for the Managed Database. (none, asynch, semi_synch; default none) + // The replication method used for the Managed Database. + ReplicationType *string `json:"replicationType,omitempty" tf:"replication_type,omitempty"` + + // Whether to require SSL credentials to establish a connection to the Managed Database. (default false) + // Whether to require SSL credentials to establish a connection to the Managed Database. + SSLConnection *bool `json:"sslConnection,omitempty" tf:"ssl_connection,omitempty"` + // The operating status of the Managed Database. // The operating status of the Managed Database. Status *string `json:"status,omitempty" tf:"status,omitempty"` + // The Linode Instance type used for the nodes of the Managed Database instance. + // The Linode Instance type used by the Managed Database for its nodes. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + // When this Managed Database was last updated. // When this Managed Database was last updated. Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` + // Configuration settings for automated patch update maintenance for the Managed Database. + Updates []MySQLUpdatesObservation `json:"updates,omitempty" tf:"updates,omitempty"` + // The Managed Database engine version. (e.g. v8.0.26) // The Managed Database engine version. Version *string `json:"version,omitempty" tf:"version,omitempty"` @@ -66,18 +105,18 @@ type MySQLParameters struct { // The Managed Database engine in engine/version format. (e.g. mysql/8.0.26) // The Managed Database engine in engine/version format. (e.g. mysql/8.0.26) - // +kubebuilder:validation:Required - EngineID *string `json:"engineId" tf:"engine_id,omitempty"` + // +kubebuilder:validation:Optional + EngineID *string `json:"engineId,omitempty" tf:"engine_id,omitempty"` // A unique, user-defined string referring to the Managed Database. // A unique, user-defined string referring to the Managed Database. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // The region to use for the Managed Database. // The region to use for the Managed Database. - // +kubebuilder:validation:Required - Region *string `json:"region" tf:"region,omitempty"` + // +kubebuilder:validation:Optional + Region *string `json:"region,omitempty" tf:"region,omitempty"` // The replication method used for the Managed Database. (none, asynch, semi_synch; default none) // The replication method used for the Managed Database. @@ -91,8 +130,8 @@ type MySQLParameters struct { // The Linode Instance type used for the nodes of the Managed Database instance. // The Linode Instance type used by the Managed Database for its nodes. - // +kubebuilder:validation:Required - Type *string `json:"type" tf:"type,omitempty"` + // +kubebuilder:validation:Optional + Type *string `json:"type,omitempty" tf:"type,omitempty"` // Configuration settings for automated patch update maintenance for the Managed Database. // +kubebuilder:validation:Optional @@ -100,6 +139,26 @@ type MySQLParameters struct { } type MySQLUpdatesObservation struct { + + // The day to perform maintenance. (monday, tuesday, ...) + // The day to perform maintenance. + DayOfWeek *string `json:"dayOfWeek,omitempty" tf:"day_of_week,omitempty"` + + // The maximum maintenance window time in hours. (1..3) + // The maximum maintenance window time in hours. + Duration *float64 `json:"duration,omitempty" tf:"duration,omitempty"` + + // Whether maintenance occurs on a weekly or monthly basis. (weekly, monthly) + // Whether maintenance occurs on a weekly or monthly basis. + Frequency *string `json:"frequency,omitempty" tf:"frequency,omitempty"` + + // The hour to begin maintenance based in UTC time. (0..23) + // The hour to begin maintenance based in UTC time. + HourOfDay *float64 `json:"hourOfDay,omitempty" tf:"hour_of_day,omitempty"` + + // The week of the month to perform monthly frequency updates. Required for monthly frequency updates. (1..4) + // The week of the month to perform monthly frequency updates. Required for monthly frequency updates. + WeekOfMonth *float64 `json:"weekOfMonth,omitempty" tf:"week_of_month,omitempty"` } type MySQLUpdatesParameters struct { @@ -154,8 +213,12 @@ type MySQLStatus struct { type MySQL struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec MySQLSpec `json:"spec"` - Status MySQLStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.engineId)",message="engineId is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region)",message="region is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.type)",message="type is a required parameter" + Spec MySQLSpec `json:"spec"` + Status MySQLStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/database/v1alpha1/zz_postgresql_types.go b/apis/database/v1alpha1/zz_postgresql_types.go index abad68d..22c031a 100755 --- a/apis/database/v1alpha1/zz_postgresql_types.go +++ b/apis/database/v1alpha1/zz_postgresql_types.go @@ -15,14 +15,30 @@ import ( type PostgreSQLObservation struct { + // A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format. Use linode_database_access_controls to manage your allow list separately. + // A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format. + AllowList []*string `json:"allowList,omitempty" tf:"allow_list,omitempty"` + + // The number of Linode Instance nodes deployed to the Managed Database. (default 1) + // The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1. + ClusterSize *float64 `json:"clusterSize,omitempty" tf:"cluster_size,omitempty"` + // When this Managed Database was created. // When this Managed Database was created. Created *string `json:"created,omitempty" tf:"created,omitempty"` + // Whether the Managed Databases is encrypted. (default false) + // Whether the Managed Databases is encrypted. + Encrypted *bool `json:"encrypted,omitempty" tf:"encrypted,omitempty"` + // The Managed Database engine. (e.g. postgresql) // The Managed Database engine. Engine *string `json:"engine,omitempty" tf:"engine,omitempty"` + // The Managed Database engine in engine/version format. (e.g. postgresql/13.2) + // The Managed Database engine in engine/version format. (e.g. mongodb/4.4.10) + EngineID *string `json:"engineId,omitempty" tf:"engine_id,omitempty"` + // The primary host for the Managed Database. // The primary host for the Managed Database. HostPrimary *string `json:"hostPrimary,omitempty" tf:"host_primary,omitempty"` @@ -34,17 +50,44 @@ type PostgreSQLObservation struct { // The ID of the Managed Database. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // A unique, user-defined string referring to the Managed Database. + // A unique, user-defined string referring to the Managed Database. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + // The access port for this Managed Database. Port *float64 `json:"port,omitempty" tf:"port,omitempty"` + // The region to use for the Managed Database. + // The region to use for the Managed Database. + Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // The synchronization level of the replicating server. (on, local, remote_write, remote_apply, off; default off) + // The synchronization level of the replicating server.Must be `local` or `off` for the `asynch` replication type. Must be `on`, `remote_write`, or `remote_apply` for the `semi_synch` replication type. + ReplicationCommitType *string `json:"replicationCommitType,omitempty" tf:"replication_commit_type,omitempty"` + + // The replication method used for the Managed Database. (none, asynch, semi_synch; default none) + // The replication method used for the Managed Database. Must be `none` for a single node cluster. Must be `asynch` or `semi_synch` for a high availability cluster. + ReplicationType *string `json:"replicationType,omitempty" tf:"replication_type,omitempty"` + + // Whether to require SSL credentials to establish a connection to the Managed Database. (default false) + // Whether to require SSL credentials to establish a connection to the Managed Database. + SSLConnection *bool `json:"sslConnection,omitempty" tf:"ssl_connection,omitempty"` + // The operating status of the Managed Database. // The operating status of the Managed Database. Status *string `json:"status,omitempty" tf:"status,omitempty"` + // The Linode Instance type used for the nodes of the Managed Database instance. + // The Linode Instance type used by the Managed Database for its nodes. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + // When this Managed Database was last updated. // When this Managed Database was last updated. Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` + // Configuration settings for automated patch update maintenance for the Managed Database. + Updates []PostgreSQLUpdatesObservation `json:"updates,omitempty" tf:"updates,omitempty"` + // The Managed Database engine version. (e.g. 13.2) // The Managed Database engine version. Version *string `json:"version,omitempty" tf:"version,omitempty"` @@ -69,18 +112,18 @@ type PostgreSQLParameters struct { // The Managed Database engine in engine/version format. (e.g. postgresql/13.2) // The Managed Database engine in engine/version format. (e.g. mongodb/4.4.10) - // +kubebuilder:validation:Required - EngineID *string `json:"engineId" tf:"engine_id,omitempty"` + // +kubebuilder:validation:Optional + EngineID *string `json:"engineId,omitempty" tf:"engine_id,omitempty"` // A unique, user-defined string referring to the Managed Database. // A unique, user-defined string referring to the Managed Database. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // The region to use for the Managed Database. // The region to use for the Managed Database. - // +kubebuilder:validation:Required - Region *string `json:"region" tf:"region,omitempty"` + // +kubebuilder:validation:Optional + Region *string `json:"region,omitempty" tf:"region,omitempty"` // The synchronization level of the replicating server. (on, local, remote_write, remote_apply, off; default off) // The synchronization level of the replicating server.Must be `local` or `off` for the `asynch` replication type. Must be `on`, `remote_write`, or `remote_apply` for the `semi_synch` replication type. @@ -99,8 +142,8 @@ type PostgreSQLParameters struct { // The Linode Instance type used for the nodes of the Managed Database instance. // The Linode Instance type used by the Managed Database for its nodes. - // +kubebuilder:validation:Required - Type *string `json:"type" tf:"type,omitempty"` + // +kubebuilder:validation:Optional + Type *string `json:"type,omitempty" tf:"type,omitempty"` // Configuration settings for automated patch update maintenance for the Managed Database. // +kubebuilder:validation:Optional @@ -108,6 +151,26 @@ type PostgreSQLParameters struct { } type PostgreSQLUpdatesObservation struct { + + // The day to perform maintenance. (monday, tuesday, ...) + // The day to perform maintenance. + DayOfWeek *string `json:"dayOfWeek,omitempty" tf:"day_of_week,omitempty"` + + // The maximum maintenance window time in hours. (1..3) + // The maximum maintenance window time in hours. + Duration *float64 `json:"duration,omitempty" tf:"duration,omitempty"` + + // Whether maintenance occurs on a weekly or monthly basis. (weekly, monthly) + // Whether maintenance occurs on a weekly or monthly basis. + Frequency *string `json:"frequency,omitempty" tf:"frequency,omitempty"` + + // The hour to begin maintenance based in UTC time. (0..23) + // The hour to begin maintenance based in UTC time. + HourOfDay *float64 `json:"hourOfDay,omitempty" tf:"hour_of_day,omitempty"` + + // The week of the month to perform monthly frequency updates. Required for monthly frequency updates. (1..4) + // The week of the month to perform monthly frequency updates. Required for monthly frequency updates. + WeekOfMonth *float64 `json:"weekOfMonth,omitempty" tf:"week_of_month,omitempty"` } type PostgreSQLUpdatesParameters struct { @@ -162,8 +225,12 @@ type PostgreSQLStatus struct { type PostgreSQL struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec PostgreSQLSpec `json:"spec"` - Status PostgreSQLStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.engineId)",message="engineId is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region)",message="region is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.type)",message="type is a required parameter" + Spec PostgreSQLSpec `json:"spec"` + Status PostgreSQLStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/domain/v1alpha1/zz_domain_types.go b/apis/domain/v1alpha1/zz_domain_types.go index b0ec269..7abcebe 100755 --- a/apis/domain/v1alpha1/zz_domain_types.go +++ b/apis/domain/v1alpha1/zz_domain_types.go @@ -14,7 +14,47 @@ import ( ) type DomainObservation struct { + + // The list of IPs that may perform a zone transfer for this Domain. This is potentially dangerous, and should be set to an empty list unless you intend to use it. + AxfrIps []*string `json:"axfrIps,omitempty" tf:"axfr_ips,omitempty"` + + // A description for this Domain. This is for display purposes only. + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // The domain this Domain represents. These must be unique in our system; you cannot have two Domains representing the same domain. + Domain *string `json:"domain,omitempty" tf:"domain,omitempty"` + + // The amount of time in seconds that may pass before this Domain is no longer Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + ExpireSec *float64 `json:"expireSec,omitempty" tf:"expire_sec,omitempty"` + + // The group this Domain belongs to. This is for display purposes only. + Group *string `json:"group,omitempty" tf:"group,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // The IP addresses representing the master DNS for this Domain. + MasterIps []*string `json:"masterIps,omitempty" tf:"master_ips,omitempty"` + + // The amount of time in seconds before this Domain should be refreshed. Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + RefreshSec *float64 `json:"refreshSec,omitempty" tf:"refresh_sec,omitempty"` + + // The interval, in seconds, at which a failed refresh should be retried. Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + RetrySec *float64 `json:"retrySec,omitempty" tf:"retry_sec,omitempty"` + + // Start of Authority email address. This is required for master Domains. + SoaEmail *string `json:"soaEmail,omitempty" tf:"soa_email,omitempty"` + + // Used to control whether this Domain is currently being rendered. + Status *string `json:"status,omitempty" tf:"status,omitempty"` + + // 'Time to Live' - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + TTLSec *float64 `json:"ttlSec,omitempty" tf:"ttl_sec,omitempty"` + + // An array of tags applied to this object. Tags are for organizational purposes only. + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave). + Type *string `json:"type,omitempty" tf:"type,omitempty"` } type DomainParameters struct { @@ -28,8 +68,8 @@ type DomainParameters struct { Description *string `json:"description,omitempty" tf:"description,omitempty"` // The domain this Domain represents. These must be unique in our system; you cannot have two Domains representing the same domain. - // +kubebuilder:validation:Required - Domain *string `json:"domain" tf:"domain,omitempty"` + // +kubebuilder:validation:Optional + Domain *string `json:"domain,omitempty" tf:"domain,omitempty"` // The amount of time in seconds that may pass before this Domain is no longer Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. // +kubebuilder:validation:Optional @@ -68,8 +108,8 @@ type DomainParameters struct { Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` // If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave). - // +kubebuilder:validation:Required - Type *string `json:"type" tf:"type,omitempty"` + // +kubebuilder:validation:Optional + Type *string `json:"type,omitempty" tf:"type,omitempty"` } // DomainSpec defines the desired state of Domain @@ -96,8 +136,10 @@ type DomainStatus struct { type Domain struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec DomainSpec `json:"spec"` - Status DomainStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.domain)",message="domain is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.type)",message="type is a required parameter" + Spec DomainSpec `json:"spec"` + Status DomainStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/domain/v1alpha1/zz_generated.deepcopy.go b/apis/domain/v1alpha1/zz_generated.deepcopy.go index b77b76d..566c1f6 100644 --- a/apis/domain/v1alpha1/zz_generated.deepcopy.go +++ b/apis/domain/v1alpha1/zz_generated.deepcopy.go @@ -76,11 +76,94 @@ func (in *DomainList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DomainObservation) DeepCopyInto(out *DomainObservation) { *out = *in + if in.AxfrIps != nil { + in, out := &in.AxfrIps, &out.AxfrIps + *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.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Domain != nil { + in, out := &in.Domain, &out.Domain + *out = new(string) + **out = **in + } + if in.ExpireSec != nil { + in, out := &in.ExpireSec, &out.ExpireSec + *out = new(float64) + **out = **in + } + if in.Group != nil { + in, out := &in.Group, &out.Group + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.MasterIps != nil { + in, out := &in.MasterIps, &out.MasterIps + *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.RefreshSec != nil { + in, out := &in.RefreshSec, &out.RefreshSec + *out = new(float64) + **out = **in + } + if in.RetrySec != nil { + in, out := &in.RetrySec, &out.RetrySec + *out = new(float64) + **out = **in + } + if in.SoaEmail != nil { + in, out := &in.SoaEmail, &out.SoaEmail + *out = new(string) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } + if in.TTLSec != nil { + in, out := &in.TTLSec, &out.TTLSec + *out = new(float64) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *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.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DomainObservation. @@ -287,11 +370,66 @@ func (in *RecordList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RecordObservation) DeepCopyInto(out *RecordObservation) { *out = *in + if in.DomainID != nil { + in, out := &in.DomainID, &out.DomainID + *out = new(float64) + **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.Port != nil { + in, out := &in.Port, &out.Port + *out = new(float64) + **out = **in + } + if in.Priority != nil { + in, out := &in.Priority, &out.Priority + *out = new(float64) + **out = **in + } + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(string) + **out = **in + } + if in.RecordType != nil { + in, out := &in.RecordType, &out.RecordType + *out = new(string) + **out = **in + } + if in.Service != nil { + in, out := &in.Service, &out.Service + *out = new(string) + **out = **in + } + if in.TTLSec != nil { + in, out := &in.TTLSec, &out.TTLSec + *out = new(float64) + **out = **in + } + if in.Tag != nil { + in, out := &in.Tag, &out.Tag + *out = new(string) + **out = **in + } + if in.Target != nil { + in, out := &in.Target, &out.Target + *out = new(string) + **out = **in + } + if in.Weight != nil { + in, out := &in.Weight, &out.Weight + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RecordObservation. diff --git a/apis/domain/v1alpha1/zz_generated.managed.go b/apis/domain/v1alpha1/zz_generated.managed.go index 2f48a13..59481fd 100644 --- a/apis/domain/v1alpha1/zz_generated.managed.go +++ b/apis/domain/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *Domain) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Domain. +func (mg *Domain) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Domain. func (mg *Domain) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *Domain) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Domain. +func (mg *Domain) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Domain. func (mg *Domain) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -83,6 +93,11 @@ func (mg *Record) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Record. +func (mg *Record) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Record. func (mg *Record) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -116,6 +131,11 @@ func (mg *Record) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Record. +func (mg *Record) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Record. func (mg *Record) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/domain/v1alpha1/zz_record_types.go b/apis/domain/v1alpha1/zz_record_types.go index df8ae4f..d721068 100755 --- a/apis/domain/v1alpha1/zz_record_types.go +++ b/apis/domain/v1alpha1/zz_record_types.go @@ -14,7 +14,52 @@ import ( ) type RecordObservation struct { + + // The ID of the Domain to access. Changing . + // The ID of the Domain to access. + DomainID *float64 `json:"domainId,omitempty" tf:"domain_id,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // The name of this Record. Setting this is invalid for SRV records as it is generated by the API. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the subdomain being associated with an IP address. + // The name of this Record. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the subdomain being associated with an IP address. Generated for SRV records. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The port this Record points to. + // The port this Record points to. + Port *float64 `json:"port,omitempty" tf:"port,omitempty"` + + // The priority of the target host. Lower values are preferred. + // The priority of the target host. Lower values are preferred. + Priority *float64 `json:"priority,omitempty" tf:"priority,omitempty"` + + // The protocol this Record's service communicates with. Only valid for SRV records. + // The protocol this Record's service communicates with. Only valid for SRV records. + Protocol *string `json:"protocol,omitempty" tf:"protocol,omitempty"` + + // The type of Record this is in the DNS system. For example, A records associate a domain name with an IPv4 address, and AAAA records associate a domain name with an IPv6 address. See all supported record types here. Changing . + // The type of Record this is in the DNS system. For example, A records associate a domain name with an IPv4 address, and AAAA records associate a domain name with an IPv6 address. + RecordType *string `json:"recordType,omitempty" tf:"record_type,omitempty"` + + // The service this Record identified. Only valid for SRV records. + // The service this Record identified. Only valid for SRV records. + Service *string `json:"service,omitempty" tf:"service,omitempty"` + + // 'Time to Live' - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + // 'Time to Live' - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + TTLSec *float64 `json:"ttlSec,omitempty" tf:"ttl_sec,omitempty"` + + // The tag portion of a CAA record. It is invalid to set this on other record types. + // The tag portion of a CAA record. It is invalid to set this on other record types. + Tag *string `json:"tag,omitempty" tf:"tag,omitempty"` + + // The target for this Record. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the address the named Domain should resolve to. + // The target for this Record. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the address the named Domain should resolve to. + Target *string `json:"target,omitempty" tf:"target,omitempty"` + + // The relative weight of this Record. Higher values are preferred. + // The relative weight of this Record. Higher values are preferred. + Weight *float64 `json:"weight,omitempty" tf:"weight,omitempty"` } type RecordParameters struct { @@ -55,8 +100,8 @@ type RecordParameters struct { // The type of Record this is in the DNS system. For example, A records associate a domain name with an IPv4 address, and AAAA records associate a domain name with an IPv6 address. See all supported record types here. Changing . // The type of Record this is in the DNS system. For example, A records associate a domain name with an IPv4 address, and AAAA records associate a domain name with an IPv6 address. - // +kubebuilder:validation:Required - RecordType *string `json:"recordType" tf:"record_type,omitempty"` + // +kubebuilder:validation:Optional + RecordType *string `json:"recordType,omitempty" tf:"record_type,omitempty"` // The service this Record identified. Only valid for SRV records. // The service this Record identified. Only valid for SRV records. @@ -75,8 +120,8 @@ type RecordParameters struct { // The target for this Record. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the address the named Domain should resolve to. // The target for this Record. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the address the named Domain should resolve to. - // +kubebuilder:validation:Required - Target *string `json:"target" tf:"target,omitempty"` + // +kubebuilder:validation:Optional + Target *string `json:"target,omitempty" tf:"target,omitempty"` // The relative weight of this Record. Higher values are preferred. // The relative weight of this Record. Higher values are preferred. @@ -108,8 +153,10 @@ type RecordStatus struct { type Record struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec RecordSpec `json:"spec"` - Status RecordStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.recordType)",message="recordType is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.target)",message="target is a required parameter" + Spec RecordSpec `json:"spec"` + Status RecordStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/firewall/v1alpha1/zz_device_types.go b/apis/firewall/v1alpha1/zz_device_types.go index 6331aa6..703febb 100755 --- a/apis/firewall/v1alpha1/zz_device_types.go +++ b/apis/firewall/v1alpha1/zz_device_types.go @@ -19,6 +19,18 @@ type DeviceObservation struct { // When this Firewall Device was created. Created *string `json:"created,omitempty" tf:"created,omitempty"` + // The unique ID of the entity to attach. + // The ID of the entity to create a Firewall device for. + EntityID *float64 `json:"entityId,omitempty" tf:"entity_id,omitempty"` + + // The type of the entity to attach. (default: linode) + // The type of the entity to create a Firewall device for. + EntityType *string `json:"entityType,omitempty" tf:"entity_type,omitempty"` + + // The unique ID of the target Firewall. + // The ID of the Firewall to access. + FirewallID *float64 `json:"firewallId,omitempty" tf:"firewall_id,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` // When the Firewall Device was last updated. diff --git a/apis/firewall/v1alpha1/zz_firewall_types.go b/apis/firewall/v1alpha1/zz_firewall_types.go index d2fdfa8..921c2d3 100755 --- a/apis/firewall/v1alpha1/zz_firewall_types.go +++ b/apis/firewall/v1alpha1/zz_firewall_types.go @@ -39,12 +39,42 @@ type FirewallObservation struct { // The devices associated with this firewall. Devices []DevicesObservation `json:"devices,omitempty" tf:"devices,omitempty"` + // If true, the Firewall's rules are not enforced (defaults to false). + // If true, the Firewall is inactive. + Disabled *bool `json:"disabled,omitempty" tf:"disabled,omitempty"` + // The ID of the Firewall. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // A firewall rule that specifies what inbound network traffic is allowed. + Inbound []InboundObservation `json:"inbound,omitempty" tf:"inbound,omitempty"` + + // The default behavior for inbound traffic. This setting can be overridden by updating the inbound.action property of the Firewall Rule. (ACCEPT, DROP) + // The default behavior for inbound traffic. This setting can be overridden by updating the inbound.action property for an individual Firewall Rule. + InboundPolicy *string `json:"inboundPolicy,omitempty" tf:"inbound_policy,omitempty"` + + // This Firewall's unique label. + // The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // A list of IDs of Linodes this Firewall should govern it's network traffic for. + // The IDs of Linodes to apply this firewall to. + Linodes []*float64 `json:"linodes,omitempty" tf:"linodes,omitempty"` + + // A firewall rule that specifies what outbound network traffic is allowed. + Outbound []OutboundObservation `json:"outbound,omitempty" tf:"outbound,omitempty"` + + // The default behavior for outbound traffic. This setting can be overridden by updating the outbound.action property for an individual Firewall Rule. (ACCEPT, DROP) + // The default behavior for outbound traffic. This setting can be overridden by updating the outbound.action property for an individual Firewall Rule. + OutboundPolicy *string `json:"outboundPolicy,omitempty" tf:"outbound_policy,omitempty"` + // The status of the Firewall. // The status of the firewall. Status *string `json:"status,omitempty" tf:"status,omitempty"` + + // A list of tags applied to the Kubernetes cluster. Tags are for organizational purposes only. + // An array of tags applied to this object. Tags are for organizational purposes only. + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` } type FirewallParameters struct { @@ -60,13 +90,13 @@ type FirewallParameters struct { // The default behavior for inbound traffic. This setting can be overridden by updating the inbound.action property of the Firewall Rule. (ACCEPT, DROP) // The default behavior for inbound traffic. This setting can be overridden by updating the inbound.action property for an individual Firewall Rule. - // +kubebuilder:validation:Required - InboundPolicy *string `json:"inboundPolicy" tf:"inbound_policy,omitempty"` + // +kubebuilder:validation:Optional + InboundPolicy *string `json:"inboundPolicy,omitempty" tf:"inbound_policy,omitempty"` // This Firewall's unique label. // The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // A list of IDs of Linodes this Firewall should govern it's network traffic for. // The IDs of Linodes to apply this firewall to. @@ -88,8 +118,8 @@ type FirewallParameters struct { // The default behavior for outbound traffic. This setting can be overridden by updating the outbound.action property for an individual Firewall Rule. (ACCEPT, DROP) // The default behavior for outbound traffic. This setting can be overridden by updating the outbound.action property for an individual Firewall Rule. - // +kubebuilder:validation:Required - OutboundPolicy *string `json:"outboundPolicy" tf:"outbound_policy,omitempty"` + // +kubebuilder:validation:Optional + OutboundPolicy *string `json:"outboundPolicy,omitempty" tf:"outbound_policy,omitempty"` // A list of tags applied to the Kubernetes cluster. Tags are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. @@ -98,6 +128,30 @@ type FirewallParameters struct { } type InboundObservation struct { + + // Controls whether traffic is accepted or dropped by this rule (ACCEPT, DROP). Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule. + // Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule. + Action *string `json:"action,omitempty" tf:"action,omitempty"` + + // A list of IPv4 addresses or networks. Must be in IP/mask format. + // A list of IP addresses, CIDR blocks, or 0.0.0.0/0 (to allow all) this rule applies to. + IPv4 []*string `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // A list of IPv6 addresses or networks. Must be in IP/mask format. + // A list of IPv6 addresses or networks this rule applies to. + IPv6 []*string `json:"ipv6,omitempty" tf:"ipv6,omitempty"` + + // This Firewall's unique label. + // Used to identify this rule. For display purposes only. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91"). + // A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91"). + Ports *string `json:"ports,omitempty" tf:"ports,omitempty"` + + // The network protocol this rule controls. (TCP, UDP, ICMP) + // The network protocol this rule controls. + Protocol *string `json:"protocol,omitempty" tf:"protocol,omitempty"` } type InboundParameters struct { @@ -134,6 +188,30 @@ type InboundParameters struct { } type OutboundObservation struct { + + // Controls whether traffic is accepted or dropped by this rule (ACCEPT, DROP). Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule. + // Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule. + Action *string `json:"action,omitempty" tf:"action,omitempty"` + + // A list of IPv4 addresses or networks. Must be in IP/mask format. + // A list of IP addresses, CIDR blocks, or 0.0.0.0/0 (to allow all) this rule applies to. + IPv4 []*string `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // A list of IPv6 addresses or networks. Must be in IP/mask format. + // A list of IPv6 addresses or networks this rule applies to. + IPv6 []*string `json:"ipv6,omitempty" tf:"ipv6,omitempty"` + + // This Firewall's unique label. + // Used to identify this rule. For display purposes only. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91"). + // A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91"). + Ports *string `json:"ports,omitempty" tf:"ports,omitempty"` + + // The network protocol this rule controls. (TCP, UDP, ICMP) + // The network protocol this rule controls. + Protocol *string `json:"protocol,omitempty" tf:"protocol,omitempty"` } type OutboundParameters struct { @@ -193,8 +271,11 @@ type FirewallStatus struct { type Firewall struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec FirewallSpec `json:"spec"` - Status FirewallStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.inboundPolicy)",message="inboundPolicy is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.outboundPolicy)",message="outboundPolicy is a required parameter" + Spec FirewallSpec `json:"spec"` + Status FirewallStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/firewall/v1alpha1/zz_generated.deepcopy.go b/apis/firewall/v1alpha1/zz_generated.deepcopy.go index 81c86f6..aa1d34d 100644 --- a/apis/firewall/v1alpha1/zz_generated.deepcopy.go +++ b/apis/firewall/v1alpha1/zz_generated.deepcopy.go @@ -81,6 +81,21 @@ func (in *DeviceObservation) DeepCopyInto(out *DeviceObservation) { *out = new(string) **out = **in } + if in.EntityID != nil { + in, out := &in.EntityID, &out.EntityID + *out = new(float64) + **out = **in + } + if in.EntityType != nil { + in, out := &in.EntityType, &out.EntityType + *out = new(string) + **out = **in + } + if in.FirewallID != nil { + in, out := &in.FirewallID, &out.FirewallID + *out = new(float64) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) @@ -311,16 +326,72 @@ func (in *FirewallObservation) DeepCopyInto(out *FirewallObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Disabled != nil { + in, out := &in.Disabled, &out.Disabled + *out = new(bool) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.Inbound != nil { + in, out := &in.Inbound, &out.Inbound + *out = make([]InboundObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InboundPolicy != nil { + in, out := &in.InboundPolicy, &out.InboundPolicy + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Linodes != nil { + in, out := &in.Linodes, &out.Linodes + *out = make([]*float64, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(float64) + **out = **in + } + } + } + if in.Outbound != nil { + in, out := &in.Outbound, &out.Outbound + *out = make([]OutboundObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.OutboundPolicy != nil { + in, out := &in.OutboundPolicy, &out.OutboundPolicy + *out = new(string) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) **out = **in } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *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 FirewallObservation. @@ -453,6 +524,48 @@ func (in *FirewallStatus) DeepCopy() *FirewallStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InboundObservation) DeepCopyInto(out *InboundObservation) { *out = *in + if in.Action != nil { + in, out := &in.Action, &out.Action + *out = new(string) + **out = **in + } + if in.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *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.IPv6 != nil { + in, out := &in.IPv6, &out.IPv6 + *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.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = new(string) + **out = **in + } + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InboundObservation. @@ -525,6 +638,48 @@ func (in *InboundParameters) DeepCopy() *InboundParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OutboundObservation) DeepCopyInto(out *OutboundObservation) { *out = *in + if in.Action != nil { + in, out := &in.Action, &out.Action + *out = new(string) + **out = **in + } + if in.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *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.IPv6 != nil { + in, out := &in.IPv6, &out.IPv6 + *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.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = new(string) + **out = **in + } + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OutboundObservation. diff --git a/apis/firewall/v1alpha1/zz_generated.managed.go b/apis/firewall/v1alpha1/zz_generated.managed.go index cf7e631..1bf7b48 100644 --- a/apis/firewall/v1alpha1/zz_generated.managed.go +++ b/apis/firewall/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *Device) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Device. +func (mg *Device) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Device. func (mg *Device) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *Device) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Device. +func (mg *Device) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Device. func (mg *Device) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -83,6 +93,11 @@ func (mg *Firewall) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Firewall. +func (mg *Firewall) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Firewall. func (mg *Firewall) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -116,6 +131,11 @@ func (mg *Firewall) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Firewall. +func (mg *Firewall) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Firewall. func (mg *Firewall) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/image/v1alpha1/zz_generated.deepcopy.go b/apis/image/v1alpha1/zz_generated.deepcopy.go index ce4b327..d79ff00 100644 --- a/apis/image/v1alpha1/zz_generated.deepcopy.go +++ b/apis/image/v1alpha1/zz_generated.deepcopy.go @@ -91,11 +91,31 @@ func (in *ImageObservation) DeepCopyInto(out *ImageObservation) { *out = new(bool) **out = **in } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } if in.Expiry != nil { in, out := &in.Expiry, &out.Expiry *out = new(string) **out = **in } + if in.FileHash != nil { + in, out := &in.FileHash, &out.FileHash + *out = new(string) + **out = **in + } + if in.FilePath != nil { + in, out := &in.FilePath, &out.FilePath + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) @@ -106,6 +126,21 @@ func (in *ImageObservation) DeepCopyInto(out *ImageObservation) { *out = new(bool) **out = **in } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.LinodeID != nil { + in, out := &in.LinodeID, &out.LinodeID + *out = new(float64) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } if in.Size != nil { in, out := &in.Size, &out.Size *out = new(float64) diff --git a/apis/image/v1alpha1/zz_generated.managed.go b/apis/image/v1alpha1/zz_generated.managed.go index 9599464..0acbed6 100644 --- a/apis/image/v1alpha1/zz_generated.managed.go +++ b/apis/image/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *Image) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Image. +func (mg *Image) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Image. func (mg *Image) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *Image) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Image. +func (mg *Image) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Image. func (mg *Image) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/image/v1alpha1/zz_image_types.go b/apis/image/v1alpha1/zz_image_types.go index d66f5c8..a4e9288 100755 --- a/apis/image/v1alpha1/zz_image_types.go +++ b/apis/image/v1alpha1/zz_image_types.go @@ -27,10 +27,26 @@ type ImageObservation struct { // Whether or not this Image is deprecated. Will only be True for deprecated public Images. Deprecated *bool `json:"deprecated,omitempty" tf:"deprecated,omitempty"` + // A detailed description of this Image. + // A detailed description of this Image. + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // The ID of the Linode Disk that this Image will be created from. + // The ID of the Linode Disk that this Image will be created from. + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + // Only Images created automatically (from a deleted Linode; type=automatic) will expire. // Only Images created automatically (from a deleted Linode; type=automatic) will expire. Expiry *string `json:"expiry,omitempty" tf:"expiry,omitempty"` + // The MD5 hash of the file to be uploaded. This is used to trigger file updates. + // The MD5 hash of the image file. + FileHash *string `json:"fileHash,omitempty" tf:"file_hash,omitempty"` + + // The path of the image file to be uploaded. + // The name of the file to upload to this image. + FilePath *string `json:"filePath,omitempty" tf:"file_path,omitempty"` + // The unique ID of this Image. The ID of private images begin with private/ followed by the numeric identifier of the private image, for example private/12345. ID *string `json:"id,omitempty" tf:"id,omitempty"` @@ -38,6 +54,18 @@ type ImageObservation struct { // True if the Image is public. IsPublic *bool `json:"isPublic,omitempty" tf:"is_public,omitempty"` + // A short description of the Image. Labels cannot contain special characters. + // A short description of the Image. Labels cannot contain special characters. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The ID of the Linode that this Image will be created from. + // The ID of the Linode that this Image will be created from. + LinodeID *float64 `json:"linodeId,omitempty" tf:"linode_id,omitempty"` + + // The region of the image. See all regions here. + // The region to upload to. + Region *string `json:"region,omitempty" tf:"region,omitempty"` + // The minimum size this Image needs to deploy. Size is in MB. // The minimum size this Image needs to deploy. Size is in MB. Size *float64 `json:"size,omitempty" tf:"size,omitempty"` @@ -87,8 +115,8 @@ type ImageParameters struct { // A short description of the Image. Labels cannot contain special characters. // A short description of the Image. Labels cannot contain special characters. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // The ID of the Linode that this Image will be created from. // The ID of the Linode that this Image will be created from. @@ -134,8 +162,9 @@ type ImageStatus struct { type Image struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ImageSpec `json:"spec"` - Status ImageStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + Spec ImageSpec `json:"spec"` + Status ImageStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/instance/v1alpha1/zz_config_types.go b/apis/instance/v1alpha1/zz_config_types.go index 8bbec66..2ea54c5 100755 --- a/apis/instance/v1alpha1/zz_config_types.go +++ b/apis/instance/v1alpha1/zz_config_types.go @@ -14,6 +14,31 @@ import ( ) type ConfigDevicesObservation struct { + + // The SDA-SDH slots, represent the Linux block device nodes for the first 8 disks attached to the Linode. Each device must be suplied sequentially. The device can be either a Disk or a Volume identified by disk_id or volume_id. Only one disk identifier is permitted per slot. Devices mapped from sde through sdh are unavailable in "fullvirt" virt_mode. + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sda []DevicesSdaObservation `json:"sda,omitempty" tf:"sda,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdb []DevicesSdbObservation `json:"sdb,omitempty" tf:"sdb,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdc []DevicesSdcObservation `json:"sdc,omitempty" tf:"sdc,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdd []DevicesSddObservation `json:"sdd,omitempty" tf:"sdd,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sde []DevicesSdeObservation `json:"sde,omitempty" tf:"sde,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdf []DevicesSdfObservation `json:"sdf,omitempty" tf:"sdf,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdg []DevicesSdgObservation `json:"sdg,omitempty" tf:"sdg,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdh []DevicesSdhObservation `json:"sdh,omitempty" tf:"sdh,omitempty"` } type ConfigDevicesParameters struct { @@ -53,6 +78,26 @@ type ConfigDevicesParameters struct { } type ConfigHelpersObservation struct { + + // Populates the /dev directory early during boot without udev. (default true) + // Populates the /dev directory early during boot without udev. + DevtmpfsAutomount *bool `json:"devtmpfsAutomount,omitempty" tf:"devtmpfs_automount,omitempty"` + + // Helps maintain correct inittab/upstart console device. (default true) + // Helps maintain correct inittab/upstart console device. + Distro *bool `json:"distro,omitempty" tf:"distro,omitempty"` + + // Creates a modules dependency file for the Kernel you run. (default true) + // Creates a modules dependency file for the Kernel you run. + ModulesDep *bool `json:"modulesDep,omitempty" tf:"modules_dep,omitempty"` + + // Automatically configures static networking. (default true) + // Automatically configures static networking. + Network *bool `json:"network,omitempty" tf:"network,omitempty"` + + // Disables updatedb cron job to avoid disk thrashing. (default true) + // Disables updatedb cron job to avoid disk thrashing. + UpdatedbDisabled *bool `json:"updatedbDisabled,omitempty" tf:"updatedb_disabled,omitempty"` } type ConfigHelpersParameters struct { @@ -84,6 +129,18 @@ type ConfigHelpersParameters struct { } type ConfigInterfaceObservation struct { + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. + IpamAddress *string `json:"ipamAddress,omitempty" tf:"ipam_address,omitempty"` + + // The Config’s label for display purposes only. + // The name of this interface. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The type of interface. (public, vlan) + // The type of interface. + Purpose *string `json:"purpose,omitempty" tf:"purpose,omitempty"` } type ConfigInterfaceParameters struct { @@ -105,7 +162,53 @@ type ConfigInterfaceParameters struct { } type ConfigObservation_2 struct { + + // If true, the Linode will be booted into this config. If another config is booted, the Linode will be rebooted into this config. If false, the Linode will be shutdown only if it is currently booted into this config. If undefined, the config will alter the boot status of the Linode. + // If true, the Linode will be booted to running state. If false, the Linode will be shutdown. If undefined, no action will be taken. + Booted *bool `json:"booted,omitempty" tf:"booted,omitempty"` + + // Optional field for arbitrary User comments on this Config. + // Optional field for arbitrary User comments on this Config. + Comments *string `json:"comments,omitempty" tf:"comments,omitempty"` + + // A dictionary of device disks to use as a device map in a Linode’s configuration profile. + Devices []ConfigDevicesObservation `json:"devices,omitempty" tf:"devices,omitempty"` + + // Helpers enabled when booting to this Linode Config. + Helpers []ConfigHelpersObservation `json:"helpers,omitempty" tf:"helpers,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // An array of Network Interfaces to add to this Linode’s Configuration Profile. + Interface []ConfigInterfaceObservation `json:"interface,omitempty" tf:"interface,omitempty"` + + // A Kernel ID to boot a Linode with. (default linode/latest-64bit) + // A Kernel ID to boot a Linode with. Defaults to “linode/latest-64bit”. + Kernel *string `json:"kernel,omitempty" tf:"kernel,omitempty"` + + // The Config’s label for display purposes only. + // The Config’s label for display purposes only. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The ID of the Linode to create this configuration profile under. + // The ID of the Linode to create this configuration profile under. + LinodeID *float64 `json:"linodeId,omitempty" tf:"linode_id,omitempty"` + + // The memory limit of the Config. Defaults to the total ram of the Linode. + // The memory limit of the Linode. + MemoryLimit *float64 `json:"memoryLimit,omitempty" tf:"memory_limit,omitempty"` + + // The root device to boot. (default /dev/sda) + // The root device to boot. If no value or an invalid value is provided, root device will default to /dev/sda. If the device specified at the root device location is not mounted, the Linode will not boot until a device is mounted. + RootDevice *string `json:"rootDevice,omitempty" tf:"root_device,omitempty"` + + // Defines the state of your Linode after booting. (default, single, binbash) + // Defines the state of your Linode after booting. + RunLevel *string `json:"runLevel,omitempty" tf:"run_level,omitempty"` + + // Controls the virtualization mode. (paravirt, fullvirt) + // Controls the virtualization mode. + VirtMode *string `json:"virtMode,omitempty" tf:"virt_mode,omitempty"` } type ConfigParameters_2 struct { @@ -139,8 +242,8 @@ type ConfigParameters_2 struct { // The Config’s label for display purposes only. // The Config’s label for display purposes only. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // The ID of the Linode to create this configuration profile under. // The ID of the Linode to create this configuration profile under. @@ -178,6 +281,14 @@ type ConfigParameters_2 struct { } type DevicesSdaObservation struct { + + // The Disk ID to map to this device slot + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type DevicesSdaParameters struct { @@ -203,6 +314,14 @@ type DevicesSdaParameters struct { } type DevicesSdbObservation struct { + + // The Disk ID to map to this device slot + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type DevicesSdbParameters struct { @@ -228,6 +347,14 @@ type DevicesSdbParameters struct { } type DevicesSdcObservation struct { + + // The Disk ID to map to this device slot + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type DevicesSdcParameters struct { @@ -253,6 +380,14 @@ type DevicesSdcParameters struct { } type DevicesSddObservation struct { + + // The Disk ID to map to this device slot + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type DevicesSddParameters struct { @@ -278,6 +413,14 @@ type DevicesSddParameters struct { } type DevicesSdeObservation struct { + + // The Disk ID to map to this device slot + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type DevicesSdeParameters struct { @@ -303,6 +446,14 @@ type DevicesSdeParameters struct { } type DevicesSdfObservation struct { + + // The Disk ID to map to this device slot + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type DevicesSdfParameters struct { @@ -328,6 +479,14 @@ type DevicesSdfParameters struct { } type DevicesSdgObservation struct { + + // The Disk ID to map to this device slot + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type DevicesSdgParameters struct { @@ -353,6 +512,14 @@ type DevicesSdgParameters struct { } type DevicesSdhObservation struct { + + // The Disk ID to map to this device slot + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type DevicesSdhParameters struct { @@ -401,8 +568,9 @@ type ConfigStatus struct { type Config struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ConfigSpec `json:"spec"` - Status ConfigStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + Spec ConfigSpec `json:"spec"` + Status ConfigStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/instance/v1alpha1/zz_disk_types.go b/apis/instance/v1alpha1/zz_disk_types.go index c0f2e9d..14c2cbc 100755 --- a/apis/instance/v1alpha1/zz_disk_types.go +++ b/apis/instance/v1alpha1/zz_disk_types.go @@ -15,12 +15,44 @@ import ( type DiskObservation_2 struct { + // A list of public SSH keys that will be automatically appended to the root user’s ~/.ssh/authorized_keys file when deploying from an Image. + // A list of public SSH keys that will be automatically appended to the root user’s ~/.ssh/authorized_keys file when deploying from an Image. + AuthorizedKeys []*string `json:"authorizedKeys,omitempty" tf:"authorized_keys,omitempty"` + + // A list of usernames. If the usernames have associated SSH keys, the keys will be appended to the + // A list of usernames. If the usernames have associated SSH keys, the keys will be appended to the root users ~/.ssh/authorized_keys file automatically when deploying from an Image. + AuthorizedUsers []*string `json:"authorizedUsers,omitempty" tf:"authorized_users,omitempty"` + // When this disk was created. // When this disk was created. Created *string `json:"created,omitempty" tf:"created,omitempty"` + // The filesystem of this disk. (raw, swap, ext3, ext4, initrd) + // The filesystem of this disk. + Filesystem *string `json:"filesystem,omitempty" tf:"filesystem,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + // An Image ID to deploy the Linode Disk from. + // An Image ID to deploy the Linode Disk from. + Image *string `json:"image,omitempty" tf:"image,omitempty"` + + // The Disk's label for display purposes only. + // The Disk’s label is for display purposes only. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The ID of the Linode to create this Disk under. + // The ID of the Linode to assign this disk to. + LinodeID *float64 `json:"linodeId,omitempty" tf:"linode_id,omitempty"` + + // The size of the Disk in MB. NOTE: Resizing a disk will trigger a Linode reboot. + // The size of the Disk in MB. + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // A StackScript ID that will cause the referenced StackScript to be run during deployment of this Disk. + // A StackScript ID that will cause the referenced StackScript to be run during deployment of this Linode. + StackscriptID *float64 `json:"stackscriptId,omitempty" tf:"stackscript_id,omitempty"` + // A brief description of this Disk's current state. // A brief description of this Disk's current state. Status *string `json:"status,omitempty" tf:"status,omitempty"` @@ -54,8 +86,8 @@ type DiskParameters_2 struct { // The Disk's label for display purposes only. // The Disk’s label is for display purposes only. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // The ID of the Linode to create this Disk under. // The ID of the Linode to assign this disk to. @@ -78,8 +110,8 @@ type DiskParameters_2 struct { // The size of the Disk in MB. NOTE: Resizing a disk will trigger a Linode reboot. // The size of the Disk in MB. - // +kubebuilder:validation:Required - Size *float64 `json:"size" tf:"size,omitempty"` + // +kubebuilder:validation:Optional + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` // An object containing responses to any User Defined Fields present in the StackScript being deployed to this Disk. Only accepted if stackscript_id is given. // An object containing responses to any User Defined Fields present in the StackScript being deployed to this Disk. Only accepted if 'stackscript_id' is given. The required values depend on the StackScript being deployed. @@ -125,8 +157,10 @@ type DiskStatus struct { type Disk struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec DiskSpec `json:"spec"` - Status DiskStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.size)",message="size is a required parameter" + Spec DiskSpec `json:"spec"` + Status DiskStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/instance/v1alpha1/zz_generated.deepcopy.go b/apis/instance/v1alpha1/zz_generated.deepcopy.go index 7302aa0..e2031a4 100644 --- a/apis/instance/v1alpha1/zz_generated.deepcopy.go +++ b/apis/instance/v1alpha1/zz_generated.deepcopy.go @@ -17,6 +17,31 @@ import ( // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AlertsObservation) DeepCopyInto(out *AlertsObservation) { *out = *in + if in.CPU != nil { + in, out := &in.CPU, &out.CPU + *out = new(float64) + **out = **in + } + if in.Io != nil { + in, out := &in.Io, &out.Io + *out = new(float64) + **out = **in + } + if in.NetworkIn != nil { + in, out := &in.NetworkIn, &out.NetworkIn + *out = new(float64) + **out = **in + } + if in.NetworkOut != nil { + in, out := &in.NetworkOut, &out.NetworkOut + *out = new(float64) + **out = **in + } + if in.TransferQuota != nil { + in, out := &in.TransferQuota, &out.TransferQuota + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AlertsObservation. @@ -146,6 +171,62 @@ func (in *Config) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConfigDevicesObservation) DeepCopyInto(out *ConfigDevicesObservation) { *out = *in + if in.Sda != nil { + in, out := &in.Sda, &out.Sda + *out = make([]DevicesSdaObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdb != nil { + in, out := &in.Sdb, &out.Sdb + *out = make([]DevicesSdbObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdc != nil { + in, out := &in.Sdc, &out.Sdc + *out = make([]DevicesSdcObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdd != nil { + in, out := &in.Sdd, &out.Sdd + *out = make([]DevicesSddObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sde != nil { + in, out := &in.Sde, &out.Sde + *out = make([]DevicesSdeObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdf != nil { + in, out := &in.Sdf, &out.Sdf + *out = make([]DevicesSdfObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdg != nil { + in, out := &in.Sdg, &out.Sdg + *out = make([]DevicesSdgObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdh != nil { + in, out := &in.Sdh, &out.Sdh + *out = make([]DevicesSdhObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigDevicesObservation. @@ -232,6 +313,31 @@ func (in *ConfigDevicesParameters) DeepCopy() *ConfigDevicesParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConfigHelpersObservation) DeepCopyInto(out *ConfigHelpersObservation) { *out = *in + if in.DevtmpfsAutomount != nil { + in, out := &in.DevtmpfsAutomount, &out.DevtmpfsAutomount + *out = new(bool) + **out = **in + } + if in.Distro != nil { + in, out := &in.Distro, &out.Distro + *out = new(bool) + **out = **in + } + if in.ModulesDep != nil { + in, out := &in.ModulesDep, &out.ModulesDep + *out = new(bool) + **out = **in + } + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(bool) + **out = **in + } + if in.UpdatedbDisabled != nil { + in, out := &in.UpdatedbDisabled, &out.UpdatedbDisabled + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigHelpersObservation. @@ -287,6 +393,21 @@ func (in *ConfigHelpersParameters) DeepCopy() *ConfigHelpersParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConfigInterfaceObservation) DeepCopyInto(out *ConfigInterfaceObservation) { *out = *in + if in.IpamAddress != nil { + in, out := &in.IpamAddress, &out.IpamAddress + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Purpose != nil { + in, out := &in.Purpose, &out.Purpose + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigInterfaceObservation. @@ -364,6 +485,62 @@ func (in *ConfigList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConfigObservation) DeepCopyInto(out *ConfigObservation) { *out = *in + if in.Comments != nil { + in, out := &in.Comments, &out.Comments + *out = new(string) + **out = **in + } + if in.Devices != nil { + in, out := &in.Devices, &out.Devices + *out = make([]DevicesObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Helpers != nil { + in, out := &in.Helpers, &out.Helpers + *out = make([]HelpersObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Interface != nil { + in, out := &in.Interface, &out.Interface + *out = make([]InterfaceObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Kernel != nil { + in, out := &in.Kernel, &out.Kernel + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.MemoryLimit != nil { + in, out := &in.MemoryLimit, &out.MemoryLimit + *out = new(float64) + **out = **in + } + if in.RootDevice != nil { + in, out := &in.RootDevice, &out.RootDevice + *out = new(string) + **out = **in + } + if in.RunLevel != nil { + in, out := &in.RunLevel, &out.RunLevel + *out = new(string) + **out = **in + } + if in.VirtMode != nil { + in, out := &in.VirtMode, &out.VirtMode + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigObservation. @@ -379,11 +556,77 @@ func (in *ConfigObservation) DeepCopy() *ConfigObservation { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConfigObservation_2) DeepCopyInto(out *ConfigObservation_2) { *out = *in + if in.Booted != nil { + in, out := &in.Booted, &out.Booted + *out = new(bool) + **out = **in + } + if in.Comments != nil { + in, out := &in.Comments, &out.Comments + *out = new(string) + **out = **in + } + if in.Devices != nil { + in, out := &in.Devices, &out.Devices + *out = make([]ConfigDevicesObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Helpers != nil { + in, out := &in.Helpers, &out.Helpers + *out = make([]ConfigHelpersObservation, 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.Interface != nil { + in, out := &in.Interface, &out.Interface + *out = make([]ConfigInterfaceObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Kernel != nil { + in, out := &in.Kernel, &out.Kernel + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.LinodeID != nil { + in, out := &in.LinodeID, &out.LinodeID + *out = new(float64) + **out = **in + } + if in.MemoryLimit != nil { + in, out := &in.MemoryLimit, &out.MemoryLimit + *out = new(float64) + **out = **in + } + if in.RootDevice != nil { + in, out := &in.RootDevice, &out.RootDevice + *out = new(string) + **out = **in + } + if in.RunLevel != nil { + in, out := &in.RunLevel, &out.RunLevel + *out = new(string) + **out = **in + } + if in.VirtMode != nil { + in, out := &in.VirtMode, &out.VirtMode + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigObservation_2. @@ -595,6 +838,62 @@ func (in *ConfigStatus) DeepCopy() *ConfigStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DevicesObservation) DeepCopyInto(out *DevicesObservation) { *out = *in + if in.Sda != nil { + in, out := &in.Sda, &out.Sda + *out = make([]SdaObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdb != nil { + in, out := &in.Sdb, &out.Sdb + *out = make([]SdbObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdc != nil { + in, out := &in.Sdc, &out.Sdc + *out = make([]SdcObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdd != nil { + in, out := &in.Sdd, &out.Sdd + *out = make([]SddObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sde != nil { + in, out := &in.Sde, &out.Sde + *out = make([]SdeObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdf != nil { + in, out := &in.Sdf, &out.Sdf + *out = make([]SdfObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdg != nil { + in, out := &in.Sdg, &out.Sdg + *out = make([]SdgObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Sdh != nil { + in, out := &in.Sdh, &out.Sdh + *out = make([]SdhObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DevicesObservation. @@ -681,6 +980,16 @@ func (in *DevicesParameters) DeepCopy() *DevicesParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DevicesSdaObservation) DeepCopyInto(out *DevicesSdaObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DevicesSdaObservation. @@ -731,6 +1040,16 @@ func (in *DevicesSdaParameters) DeepCopy() *DevicesSdaParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DevicesSdbObservation) DeepCopyInto(out *DevicesSdbObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DevicesSdbObservation. @@ -781,6 +1100,16 @@ func (in *DevicesSdbParameters) DeepCopy() *DevicesSdbParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DevicesSdcObservation) DeepCopyInto(out *DevicesSdcObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DevicesSdcObservation. @@ -831,6 +1160,16 @@ func (in *DevicesSdcParameters) DeepCopy() *DevicesSdcParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DevicesSddObservation) DeepCopyInto(out *DevicesSddObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DevicesSddObservation. @@ -881,6 +1220,16 @@ func (in *DevicesSddParameters) DeepCopy() *DevicesSddParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DevicesSdeObservation) DeepCopyInto(out *DevicesSdeObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DevicesSdeObservation. @@ -931,6 +1280,16 @@ func (in *DevicesSdeParameters) DeepCopy() *DevicesSdeParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DevicesSdfObservation) DeepCopyInto(out *DevicesSdfObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DevicesSdfObservation. @@ -981,6 +1340,16 @@ func (in *DevicesSdfParameters) DeepCopy() *DevicesSdfParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DevicesSdgObservation) DeepCopyInto(out *DevicesSdgObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DevicesSdgObservation. @@ -1031,6 +1400,16 @@ func (in *DevicesSdgParameters) DeepCopy() *DevicesSdgParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DevicesSdhObservation) DeepCopyInto(out *DevicesSdhObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DevicesSdhObservation. @@ -1140,11 +1519,63 @@ func (in *DiskList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DiskObservation) DeepCopyInto(out *DiskObservation) { *out = *in + if in.AuthorizedKeys != nil { + in, out := &in.AuthorizedKeys, &out.AuthorizedKeys + *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.AuthorizedUsers != nil { + in, out := &in.AuthorizedUsers, &out.AuthorizedUsers + *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.Filesystem != nil { + in, out := &in.Filesystem, &out.Filesystem + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(float64) **out = **in } + if in.Image != nil { + in, out := &in.Image, &out.Image + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.StackscriptID != nil { + in, out := &in.StackscriptID, &out.StackscriptID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiskObservation. @@ -1160,16 +1591,68 @@ func (in *DiskObservation) DeepCopy() *DiskObservation { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DiskObservation_2) DeepCopyInto(out *DiskObservation_2) { *out = *in + if in.AuthorizedKeys != nil { + in, out := &in.AuthorizedKeys, &out.AuthorizedKeys + *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.AuthorizedUsers != nil { + in, out := &in.AuthorizedUsers, &out.AuthorizedUsers + *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.Created != nil { in, out := &in.Created, &out.Created *out = new(string) **out = **in } + if in.Filesystem != nil { + in, out := &in.Filesystem, &out.Filesystem + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.Image != nil { + in, out := &in.Image, &out.Image + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.LinodeID != nil { + in, out := &in.LinodeID, &out.LinodeID + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.StackscriptID != nil { + in, out := &in.StackscriptID, &out.StackscriptID + *out = new(float64) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) @@ -1403,6 +1886,31 @@ func (in *DiskStatus) DeepCopy() *DiskStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *HelpersObservation) DeepCopyInto(out *HelpersObservation) { *out = *in + if in.DevtmpfsAutomount != nil { + in, out := &in.DevtmpfsAutomount, &out.DevtmpfsAutomount + *out = new(bool) + **out = **in + } + if in.Distro != nil { + in, out := &in.Distro, &out.Distro + *out = new(bool) + **out = **in + } + if in.ModulesDep != nil { + in, out := &in.ModulesDep, &out.ModulesDep + *out = new(bool) + **out = **in + } + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(bool) + **out = **in + } + if in.UpdatedbDisabled != nil { + in, out := &in.UpdatedbDisabled, &out.UpdatedbDisabled + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelpersObservation. @@ -1522,6 +2030,11 @@ func (in *IPObservation) DeepCopyInto(out *IPObservation) { *out = new(string) **out = **in } + if in.ApplyImmediately != nil { + in, out := &in.ApplyImmediately, &out.ApplyImmediately + *out = new(bool) + **out = **in + } if in.Gateway != nil { in, out := &in.Gateway, &out.Gateway *out = new(string) @@ -1532,11 +2045,26 @@ func (in *IPObservation) DeepCopyInto(out *IPObservation) { *out = new(string) **out = **in } + if in.LinodeID != nil { + in, out := &in.LinodeID, &out.LinodeID + *out = new(float64) + **out = **in + } if in.Prefix != nil { in, out := &in.Prefix, &out.Prefix *out = new(float64) **out = **in } + if in.Public != nil { + in, out := &in.Public, &out.Public + *out = new(bool) + **out = **in + } + if in.Rdns != nil { + in, out := &in.Rdns, &out.Rdns + *out = new(string) + **out = **in + } if in.Region != nil { in, out := &in.Region, &out.Region *out = new(string) @@ -1683,6 +2211,21 @@ func (in *Instance) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InstanceInterfaceObservation) DeepCopyInto(out *InstanceInterfaceObservation) { *out = *in + if in.IpamAddress != nil { + in, out := &in.IpamAddress, &out.IpamAddress + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Purpose != nil { + in, out := &in.Purpose, &out.Purpose + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceInterfaceObservation. @@ -1754,12 +2297,46 @@ func (in *InstanceList) 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 *InstanceObservation) DeepCopyInto(out *InstanceObservation) { - *out = *in + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceObservation) DeepCopyInto(out *InstanceObservation) { + *out = *in + if in.Alerts != nil { + in, out := &in.Alerts, &out.Alerts + *out = make([]AlertsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AuthorizedKeys != nil { + in, out := &in.AuthorizedKeys, &out.AuthorizedKeys + *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.AuthorizedUsers != nil { + in, out := &in.AuthorizedUsers, &out.AuthorizedUsers + *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.BackupID != nil { + in, out := &in.BackupID, &out.BackupID + *out = new(float64) + **out = **in + } if in.Backups != nil { in, out := &in.Backups, &out.Backups *out = make([]BackupsObservation, len(*in)) @@ -1767,6 +2344,28 @@ func (in *InstanceObservation) DeepCopyInto(out *InstanceObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.BackupsEnabled != nil { + in, out := &in.BackupsEnabled, &out.BackupsEnabled + *out = new(bool) + **out = **in + } + if in.BootConfigLabel != nil { + in, out := &in.BootConfigLabel, &out.BootConfigLabel + *out = new(string) + **out = **in + } + if in.Booted != nil { + in, out := &in.Booted, &out.Booted + *out = new(bool) + **out = **in + } + if in.Config != nil { + in, out := &in.Config, &out.Config + *out = make([]ConfigObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Disk != nil { in, out := &in.Disk, &out.Disk *out = make([]DiskObservation, len(*in)) @@ -1774,6 +2373,11 @@ func (in *InstanceObservation) DeepCopyInto(out *InstanceObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Group != nil { + in, out := &in.Group, &out.Group + *out = new(string) + **out = **in + } if in.HostUUID != nil { in, out := &in.HostUUID, &out.HostUUID *out = new(string) @@ -1805,11 +2409,54 @@ func (in *InstanceObservation) DeepCopyInto(out *InstanceObservation) { *out = new(string) **out = **in } + if in.Image != nil { + in, out := &in.Image, &out.Image + *out = new(string) + **out = **in + } + if in.Interface != nil { + in, out := &in.Interface, &out.Interface + *out = make([]InstanceInterfaceObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.PrivateIP != nil { + in, out := &in.PrivateIP, &out.PrivateIP + *out = new(bool) + **out = **in + } if in.PrivateIPAddress != nil { in, out := &in.PrivateIPAddress, &out.PrivateIPAddress *out = new(string) **out = **in } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.ResizeDisk != nil { + in, out := &in.ResizeDisk, &out.ResizeDisk + *out = new(bool) + **out = **in + } + if in.SharedIPv4 != nil { + in, out := &in.SharedIPv4, &out.SharedIPv4 + *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.Specs != nil { in, out := &in.Specs, &out.Specs *out = make([]SpecsObservation, len(*in)) @@ -1817,11 +2464,42 @@ func (in *InstanceObservation) DeepCopyInto(out *InstanceObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.StackscriptID != nil { + in, out := &in.StackscriptID, &out.StackscriptID + *out = new(float64) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) **out = **in } + if in.SwapSize != nil { + in, out := &in.SwapSize, &out.SwapSize + *out = new(float64) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *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.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.WatchdogEnabled != nil { + in, out := &in.WatchdogEnabled, &out.WatchdogEnabled + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceObservation. @@ -2048,6 +2726,21 @@ func (in *InstanceStatus) DeepCopy() *InstanceStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InterfaceObservation) DeepCopyInto(out *InterfaceObservation) { *out = *in + if in.IpamAddress != nil { + in, out := &in.IpamAddress, &out.IpamAddress + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Purpose != nil { + in, out := &in.Purpose, &out.Purpose + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceObservation. @@ -2133,6 +2826,21 @@ func (in *ScheduleParameters) DeepCopy() *ScheduleParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SdaObservation) DeepCopyInto(out *SdaObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.DiskLabel != nil { + in, out := &in.DiskLabel, &out.DiskLabel + *out = new(string) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SdaObservation. @@ -2178,6 +2886,21 @@ func (in *SdaParameters) DeepCopy() *SdaParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SdbObservation) DeepCopyInto(out *SdbObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.DiskLabel != nil { + in, out := &in.DiskLabel, &out.DiskLabel + *out = new(string) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SdbObservation. @@ -2223,6 +2946,21 @@ func (in *SdbParameters) DeepCopy() *SdbParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SdcObservation) DeepCopyInto(out *SdcObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.DiskLabel != nil { + in, out := &in.DiskLabel, &out.DiskLabel + *out = new(string) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SdcObservation. @@ -2268,6 +3006,21 @@ func (in *SdcParameters) DeepCopy() *SdcParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SddObservation) DeepCopyInto(out *SddObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.DiskLabel != nil { + in, out := &in.DiskLabel, &out.DiskLabel + *out = new(string) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SddObservation. @@ -2313,6 +3066,21 @@ func (in *SddParameters) DeepCopy() *SddParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SdeObservation) DeepCopyInto(out *SdeObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.DiskLabel != nil { + in, out := &in.DiskLabel, &out.DiskLabel + *out = new(string) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SdeObservation. @@ -2358,6 +3126,21 @@ func (in *SdeParameters) DeepCopy() *SdeParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SdfObservation) DeepCopyInto(out *SdfObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.DiskLabel != nil { + in, out := &in.DiskLabel, &out.DiskLabel + *out = new(string) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SdfObservation. @@ -2403,6 +3186,21 @@ func (in *SdfParameters) DeepCopy() *SdfParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SdgObservation) DeepCopyInto(out *SdgObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.DiskLabel != nil { + in, out := &in.DiskLabel, &out.DiskLabel + *out = new(string) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SdgObservation. @@ -2448,6 +3246,21 @@ func (in *SdgParameters) DeepCopy() *SdgParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SdhObservation) DeepCopyInto(out *SdhObservation) { *out = *in + if in.DiskID != nil { + in, out := &in.DiskID, &out.DiskID + *out = new(float64) + **out = **in + } + if in.DiskLabel != nil { + in, out := &in.DiskLabel, &out.DiskLabel + *out = new(string) + **out = **in + } + if in.VolumeID != nil { + in, out := &in.VolumeID, &out.VolumeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SdhObservation. @@ -2552,11 +3365,27 @@ func (in *SharedIPsList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SharedIPsObservation) DeepCopyInto(out *SharedIPsObservation) { *out = *in + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *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.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.LinodeID != nil { + in, out := &in.LinodeID, &out.LinodeID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SharedIPsObservation. diff --git a/apis/instance/v1alpha1/zz_generated.managed.go b/apis/instance/v1alpha1/zz_generated.managed.go index a3a84c4..0b83cb7 100644 --- a/apis/instance/v1alpha1/zz_generated.managed.go +++ b/apis/instance/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *Config) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Config. +func (mg *Config) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Config. func (mg *Config) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *Config) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Config. +func (mg *Config) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Config. func (mg *Config) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -83,6 +93,11 @@ func (mg *Disk) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Disk. +func (mg *Disk) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Disk. func (mg *Disk) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -116,6 +131,11 @@ func (mg *Disk) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Disk. +func (mg *Disk) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Disk. func (mg *Disk) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -149,6 +169,11 @@ func (mg *IP) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this IP. +func (mg *IP) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this IP. func (mg *IP) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -182,6 +207,11 @@ func (mg *IP) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this IP. +func (mg *IP) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this IP. func (mg *IP) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -215,6 +245,11 @@ func (mg *Instance) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Instance. +func (mg *Instance) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Instance. func (mg *Instance) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -248,6 +283,11 @@ func (mg *Instance) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Instance. +func (mg *Instance) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Instance. func (mg *Instance) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -281,6 +321,11 @@ func (mg *SharedIPs) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this SharedIPs. +func (mg *SharedIPs) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this SharedIPs. func (mg *SharedIPs) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -314,6 +359,11 @@ func (mg *SharedIPs) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this SharedIPs. +func (mg *SharedIPs) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this SharedIPs. func (mg *SharedIPs) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/instance/v1alpha1/zz_instance_types.go b/apis/instance/v1alpha1/zz_instance_types.go index 0fec600..eb7773b 100755 --- a/apis/instance/v1alpha1/zz_instance_types.go +++ b/apis/instance/v1alpha1/zz_instance_types.go @@ -14,6 +14,26 @@ import ( ) type AlertsObservation struct { + + // The percentage of CPU usage required to trigger an alert. If the average CPU usage over two hours exceeds this value, we'll send you an alert. If this is set to 0, the alert is disabled. + // The percentage of CPU usage required to trigger an alert. If the average CPU usage over two hours exceeds this value, we'll send you an alert. If this is set to 0, the alert is disabled. + CPU *float64 `json:"cpu,omitempty" tf:"cpu,omitempty"` + + // The amount of disk IO operation per second required to trigger an alert. If the average disk IO over two hours exceeds this value, we'll send you an alert. If set to 0, this alert is disabled. + // The amount of disk IO operation per second required to trigger an alert. If the average disk IO over two hours exceeds this value, we'll send you an alert. If set to 0, this alert is disabled. + Io *float64 `json:"io,omitempty" tf:"io,omitempty"` + + // The amount of incoming traffic, in Mbit/s, required to trigger an alert. If the average incoming traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled. + // The amount of incoming traffic, in Mbit/s, required to trigger an alert. If the average incoming traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled. + NetworkIn *float64 `json:"networkIn,omitempty" tf:"network_in,omitempty"` + + // The amount of outbound traffic, in Mbit/s, required to trigger an alert. If the average outbound traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled. + // The amount of outbound traffic, in Mbit/s, required to trigger an alert. If the average outbound traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled. + NetworkOut *float64 `json:"networkOut,omitempty" tf:"network_out,omitempty"` + + // The percentage of network transfer that may be used before an alert is triggered. When this value is exceeded, we'll alert you. If this is set to 0 (zero), the alert is disabled. + // The percentage of network transfer that may be used before an alert is triggered. When this value is exceeded, we'll alert you. If this is set to 0 (zero), the alert is disabled. + TransferQuota *float64 `json:"transferQuota,omitempty" tf:"transfer_quota,omitempty"` } type AlertsParameters struct { @@ -57,6 +77,45 @@ type BackupsParameters struct { } type ConfigObservation struct { + + // - Arbitrary user comments about this config. + // Optional field for arbitrary User comments on this Config. + Comments *string `json:"comments,omitempty" tf:"comments,omitempty"` + + // A list of disk or volume attachments for this config. If the boot_config_label omits a devices block, the Linode will not be booted. + // Device sda-sdh can be either a Disk or Volume identified by disk_label or volume_id. Only one type per slot allowed. + Devices []DevicesObservation `json:"devices,omitempty" tf:"devices,omitempty"` + + // (Options) Helpers enabled when booting to this Linode Config. + // Helpers enabled when booting to this Linode Config. + Helpers []HelpersObservation `json:"helpers,omitempty" tf:"helpers,omitempty"` + + // An array of Network Interfaces for this Linode’s Configuration Profile. + Interface []InterfaceObservation `json:"interface,omitempty" tf:"interface,omitempty"` + + // - A Kernel ID to boot a Linode with. Default is based on image choice. Examples are linode/latest-64bit, linode/grub2, linode/direct-disk, etc. See all kernels here. Note that this is a paginated API endpoint (docs). + // A Kernel ID to boot a Linode with. Default is based on image choice. (examples: linode/latest-64bit, linode/grub2, linode/direct-disk) + Kernel *string `json:"kernel,omitempty" tf:"kernel,omitempty"` + + // The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned. + // The Config's label for display purposes. Also used by `boot_config_label`. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // - Defaults to the total RAM of the Linode + // Defaults to the total RAM of the Linode + MemoryLimit *float64 `json:"memoryLimit,omitempty" tf:"memory_limit,omitempty"` + + // - The root device to boot. The corresponding disk must be attached to a device slot. Example: "/dev/sda" + // The root device to boot. The corresponding disk must be attached. + RootDevice *string `json:"rootDevice,omitempty" tf:"root_device,omitempty"` + + // - Defines the state of your Linode after booting. Defaults to "default". + // Defines the state of your Linode after booting. Defaults to default. + RunLevel *string `json:"runLevel,omitempty" tf:"run_level,omitempty"` + + // - Controls the virtualization mode. Defaults to "paravirt". + // Controls the virtualization mode. Defaults to paravirt. + VirtMode *string `json:"virtMode,omitempty" tf:"virt_mode,omitempty"` } type ConfigParameters struct { @@ -112,6 +171,31 @@ type ConfigParameters struct { } type DevicesObservation struct { + + // The SDA-SDH slots, represent the Linux block device nodes for the first 8 disks attached to the Linode. Each device must be suplied sequentially. The device can be either a Disk or a Volume identified by disk_label or volume_id. Only one disk identifier is permitted per slot. Devices mapped from sde through sdh are unavailable in "fullvirt" virt_mode. + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sda []SdaObservation `json:"sda,omitempty" tf:"sda,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdb []SdbObservation `json:"sdb,omitempty" tf:"sdb,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdc []SdcObservation `json:"sdc,omitempty" tf:"sdc,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdd []SddObservation `json:"sdd,omitempty" tf:"sdd,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sde []SdeObservation `json:"sde,omitempty" tf:"sde,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdf []SdfObservation `json:"sdf,omitempty" tf:"sdf,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdg []SdgObservation `json:"sdg,omitempty" tf:"sdg,omitempty"` + + // Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed. + Sdh []SdhObservation `json:"sdh,omitempty" tf:"sdh,omitempty"` } type DevicesParameters struct { @@ -152,9 +236,39 @@ type DevicesParameters struct { type DiskObservation struct { + // A list of SSH public keys to deploy for the root user on the newly created Linode. This value can not be imported. Changing + // A list of SSH public keys to deploy for the root user on the newly created Linode. Only accepted if 'image' is provided. + AuthorizedKeys []*string `json:"authorizedKeys,omitempty" tf:"authorized_keys,omitempty"` + + // A list of Linode usernames. If the usernames have associated SSH keys, the keys will be appended to the root user's ~/.ssh/authorized_keys file automatically. This value can not be imported. Changing + // A list of Linode usernames. If the usernames have associated SSH keys, the keys will be appended to the `root` user's `~/.ssh/authorized_keys` file automatically. Only accepted if 'image' is provided. + AuthorizedUsers []*string `json:"authorizedUsers,omitempty" tf:"authorized_users,omitempty"` + + // The Disk filesystem can be one of: raw, swap, ext3, ext4, initrd (max 32mb) + Filesystem *string `json:"filesystem,omitempty" tf:"filesystem,omitempty"` + // (Computed) The ID of the disk in the Linode API. // The ID of the Disk (for use in Linode Image resources and Linode Instance Config Devices) ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // An Image ID to deploy the Disk from. Official Linode Images start with linode/, while your Images start with private/. See images for more information on the Images available for you to use. Examples are linode/debian9, linode/fedora28, linode/ubuntu16.04lts, linode/arch, and private/12345. See all images here (Requires a personal access token; docs here). This value can not be imported. Changing + // An Image ID to deploy the Disk from. Official Linode Images start with linode/, while your Images start with private/. + Image *string `json:"image,omitempty" tf:"image,omitempty"` + + // The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // If true, this Disk is read-only. + // If true, this Disk is read-only. + ReadOnly *bool `json:"readOnly,omitempty" tf:"read_only,omitempty"` + + // The size of the Disk in MB. + // The size of the Disk in MB. + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // The StackScript to deploy to the newly created Linode. If provided, 'image' must also be provided, and must be an Image that is compatible with this StackScript. This value can not be imported. Changing + // The StackScript to deploy to the newly created Linode. If provided, 'image' must also be provided, and must be an Image that is compatible with this StackScript. + StackscriptID *float64 `json:"stackscriptId,omitempty" tf:"stackscript_id,omitempty"` } type DiskParameters struct { @@ -209,6 +323,25 @@ type DiskParameters struct { } type HelpersObservation struct { + + // Populates the /dev directory early during boot without udev. Defaults to false. + DevtmpfsAutomount *bool `json:"devtmpfsAutomount,omitempty" tf:"devtmpfs_automount,omitempty"` + + // Controls the behavior of the Linode Config's Distribution Helper setting. + // Controls the behavior of the Linode Config's Distribution Helper setting. + Distro *bool `json:"distro,omitempty" tf:"distro,omitempty"` + + // Creates a modules dependency file for the Kernel you run. + // Creates a modules dependency file for the Kernel you run. + ModulesDep *bool `json:"modulesDep,omitempty" tf:"modules_dep,omitempty"` + + // Controls the behavior of the Linode Config's Network Helper setting, used to automatically configure additional IP addresses assigned to this instance. + // Controls the behavior of the Linode Config's Network Helper setting, used to automatically configure additional IP addresses assigned to this instance. + Network *bool `json:"network,omitempty" tf:"network,omitempty"` + + // Disables updatedb cron job to avoid disk thrashing. + // Disables updatedb cron job to avoid disk thrashing. + UpdatedbDisabled *bool `json:"updatedbDisabled,omitempty" tf:"updatedb_disabled,omitempty"` } type HelpersParameters struct { @@ -239,6 +372,18 @@ type HelpersParameters struct { } type InstanceInterfaceObservation struct { + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. + // The IPAM Address of this interface. + IpamAddress *string `json:"ipamAddress,omitempty" tf:"ipam_address,omitempty"` + + // The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned. + // The unique label of this interface. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The type of interface. (public, vlan) + // The purpose of this interface. + Purpose *string `json:"purpose,omitempty" tf:"purpose,omitempty"` } type InstanceInterfaceParameters struct { @@ -261,14 +406,47 @@ type InstanceInterfaceParameters struct { type InstanceObservation struct { + // Configuration options for alert triggers on this Linode. + Alerts []AlertsObservation `json:"alerts,omitempty" tf:"alerts,omitempty"` + + // A list of SSH public keys to deploy for the root user on the newly created Linode. This value can not be imported. Changing + // A list of SSH public keys to deploy for the root user on the newly created Linode. Only accepted if 'image' is provided. + AuthorizedKeys []*string `json:"authorizedKeys,omitempty" tf:"authorized_keys,omitempty"` + + // A list of Linode usernames. If the usernames have associated SSH keys, the keys will be appended to the root user's ~/.ssh/authorized_keys file automatically. This value can not be imported. Changing + // A list of Linode usernames. If the usernames have associated SSH keys, the keys will be appended to the `root` user's `~/.ssh/authorized_keys` file automatically. Only accepted if 'image' is provided. + AuthorizedUsers []*string `json:"authorizedUsers,omitempty" tf:"authorized_users,omitempty"` + + // A Backup ID from another Linode's available backups. Your User must have read_write access to that Linode, the Backup must have a status of successful, and the Linode must be deployed to the same region as the Backup. See /linode/instances/{linodeId}/backups for a Linode's available backups. This field and the image field are mutually exclusive. This value can not be imported. Changing + // A Backup ID from another Linode's available backups. Your User must have read_write access to that Linode, the Backup must have a status of successful, and the Linode must be deployed to the same region as the Backup. See /linode/instances/{linodeId}/backups for a Linode's available backups. This field and the image field are mutually exclusive. + BackupID *float64 `json:"backupId,omitempty" tf:"backup_id,omitempty"` + // Information about this Linode's backups status. // Information about this Linode's backups status. Backups []BackupsObservation `json:"backups,omitempty" tf:"backups,omitempty"` + // If this field is set to true, the created Linode will automatically be enrolled in the Linode Backup service. This will incur an additional charge. The cost for the Backup service is dependent on the Type of Linode deployed. + // If this field is set to true, the created Linode will automatically be enrolled in the Linode Backup service. This will incur an additional charge. The cost for the Backup service is dependent on the Type of Linode deployed. + BackupsEnabled *bool `json:"backupsEnabled,omitempty" tf:"backups_enabled,omitempty"` + + // The Label of the Instance Config that should be used to boot the Linode instance. If there is only one config, the label of that config will be used as the boot_config_label. This value can not be imported. + // The Label of the Instance Config that should be used to boot the Linode instance. + BootConfigLabel *string `json:"bootConfigLabel,omitempty" tf:"boot_config_label,omitempty"` + + // If true, then the instance is kept or converted into in a running state. If false, the instance will be shutdown. If unspecified, the Linode's power status will not be managed by the Provider. + Booted *bool `json:"booted,omitempty" tf:"booted,omitempty"` + + // block + // Configuration profiles define the VM settings and boot behavior of the Linode Instance. + Config []ConfigObservation `json:"config,omitempty" tf:"config,omitempty"` + // The amount of storage space, in GB. this Linode has access to. A typical Linode will divide this space between a primary disk with an image deployed to it, and a swap disk, usually 512 MB. This is the default configuration created when deploying a Linode with an image through POST /linode/instances. - // +kubebuilder:validation:Optional Disk []DiskObservation `json:"disk,omitempty" tf:"disk,omitempty"` + // The display group of the Linode instance. + // The display group of the Linode instance. + Group *string `json:"group,omitempty" tf:"group,omitempty"` + // (Computed) The ID of the disk in the Linode API. // The Linode’s host machine, as a UUID. HostUUID *string `json:"hostUuid,omitempty" tf:"host_uuid,omitempty"` @@ -288,16 +466,63 @@ type InstanceObservation struct { // This Linode's IPv6 SLAAC addresses. This address is specific to a Linode, and may not be shared. IPv6 *string `json:"ipv6,omitempty" tf:"ipv6,omitempty"` + // An Image ID to deploy the Disk from. Official Linode Images start with linode/, while your Images start with private/. See images for more information on the Images available for you to use. Examples are linode/debian9, linode/fedora28, linode/ubuntu16.04lts, linode/arch, and private/12345. See all images here (Requires a personal access token; docs here). This value can not be imported. Changing + // An Image ID to deploy the Disk from. Official Linode Images start with linode/, while your Images start with private/. See /images for more information on the Images available for you to use. + Image *string `json:"image,omitempty" tf:"image,omitempty"` + + // An array of Network Interfaces for this Linode to be created with. If an explicit config or disk is defined, interfaces must be declared in the config block. + Interface []InstanceInterfaceObservation `json:"interface,omitempty" tf:"interface,omitempty"` + + // The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned. + // The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // If true, the created Linode will have private networking enabled, allowing use of the 192.168.128.0/17 network within the Linode's region. It can be enabled on an existing Linode but it can't be disabled. + // If true, the created Linode will have private networking enabled, allowing use of the 192.168.128.0/17 network within the Linode's region. + PrivateIP *bool `json:"privateIp,omitempty" tf:"private_ip,omitempty"` + // This Linode's Private IPv4 Address, if enabled. The regional private IP address range, 192.168.128.0/17, is shared by all Linode Instances in a region. // This Linode's Private IPv4 Address. The regional private IP address range is 192.168.128/17 address shared by all Linode Instances in a region. PrivateIPAddress *string `json:"privateIpAddress,omitempty" tf:"private_ip_address,omitempty"` + // This is the location where the Linode is deployed. Examples are "us-east", "us-west", "ap-south", etc. See all regions here. Changing . + // This is the location where the Linode was deployed. This cannot be changed without opening a support ticket. + Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // If true, changes in Linode type will attempt to upsize or downsize implicitly created disks. This must be false if explicit disks are defined. This is an irreversible action as Linode disks cannot be automatically downsized. + // If true, changes in Linode type will attempt to upsize or downsize implicitly created disks. This must be false if explicit disks are defined. This is an irreversible action as Linode disks cannot be automatically downsized. + ResizeDisk *bool `json:"resizeDisk,omitempty" tf:"resize_disk,omitempty"` + + // A set of IPv4 addresses to be shared with the Instance. These IP addresses can be both private and public, but must be in the same region as the instance. + // A set of IPv4 addresses to share with this Linode. + SharedIPv4 []*string `json:"sharedIpv4,omitempty" tf:"shared_ipv4,omitempty"` + // Information about the resources available to this Linode. Specs []SpecsObservation `json:"specs,omitempty" tf:"specs,omitempty"` + // The StackScript to deploy to the newly created Linode. If provided, 'image' must also be provided, and must be an Image that is compatible with this StackScript. This value can not be imported. Changing + // The StackScript to deploy to the newly created Linode. If provided, 'image' must also be provided, and must be an Image that is compatible with this StackScript. + StackscriptID *float64 `json:"stackscriptId,omitempty" tf:"stackscript_id,omitempty"` + // The status of the instance, indicating the current readiness state. (running, offline, ...) // The status of the instance, indicating the current readiness state. Status *string `json:"status,omitempty" tf:"status,omitempty"` + + // When deploying from an Image, this field is optional with a Linode API default of 512mb, otherwise it is ignored. This is used to set the swap disk size for the newly-created Linode. + // When deploying from an Image, this field is optional with a Linode API default of 512mb, otherwise it is ignored. This is used to set the swap disk size for the newly-created Linode. + SwapSize *float64 `json:"swapSize,omitempty" tf:"swap_size,omitempty"` + + // A list of tags applied to this object. Tags are for organizational purposes only. + // An array of tags applied to this object. Tags are for organizational purposes only. + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // The Linode type defines the pricing, CPU, disk, and RAM specs of the instance. Examples are "g6-nanode-1", "g6-standard-2", "g6-highmem-16", "g6-dedicated-16", etc. See all types here. + // The type of instance to be deployed, determining the price and size. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // The watchdog, named Lassie, is a Shutdown Watchdog that monitors your Linode and will reboot it if it powers off unexpectedly. It works by issuing a boot job when your Linode powers off without a shutdown job being responsible. To prevent a loop, Lassie will give up if there have been more than 5 boot jobs issued within 15 minutes. + // The watchdog, named Lassie, is a Shutdown Watchdog that monitors your Linode and will reboot it if it powers off unexpectedly. It works by issuing a boot job when your Linode powers off without a shutdown job being responsible. To prevent a loop, Lassie will give up if there have been more than 5 boot jobs issued within 15 minutes. + WatchdogEnabled *bool `json:"watchdogEnabled,omitempty" tf:"watchdog_enabled,omitempty"` } type InstanceParameters struct { @@ -370,8 +595,8 @@ type InstanceParameters struct { // This is the location where the Linode is deployed. Examples are "us-east", "us-west", "ap-south", etc. See all regions here. Changing . // This is the location where the Linode was deployed. This cannot be changed without opening a support ticket. - // +kubebuilder:validation:Required - Region *string `json:"region" tf:"region,omitempty"` + // +kubebuilder:validation:Optional + Region *string `json:"region,omitempty" tf:"region,omitempty"` // If true, changes in Linode type will attempt to upsize or downsize implicitly created disks. This must be false if explicit disks are defined. This is an irreversible action as Linode disks cannot be automatically downsized. // If true, changes in Linode type will attempt to upsize or downsize implicitly created disks. This must be false if explicit disks are defined. This is an irreversible action as Linode disks cannot be automatically downsized. @@ -429,6 +654,18 @@ type InstanceParameters struct { } type InterfaceObservation struct { + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. + // The IPAM Address of this interface. + IpamAddress *string `json:"ipamAddress,omitempty" tf:"ipam_address,omitempty"` + + // The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned. + // The unique label of this interface. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The type of interface. (public, vlan) + // The purpose of this interface. + Purpose *string `json:"purpose,omitempty" tf:"purpose,omitempty"` } type InterfaceParameters struct { @@ -462,6 +699,18 @@ type ScheduleParameters struct { } type SdaObservation struct { + + // (Computed) The Disk ID of the associated disk_label, if used. + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The label of the disk to map to this device slot. + // The `label` of the `disk` to map to this `device` slot. + DiskLabel *string `json:"diskLabel,omitempty" tf:"disk_label,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type SdaParameters struct { @@ -483,6 +732,18 @@ type SdaParameters struct { } type SdbObservation struct { + + // (Computed) The Disk ID of the associated disk_label, if used. + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The label of the disk to map to this device slot. + // The `label` of the `disk` to map to this `device` slot. + DiskLabel *string `json:"diskLabel,omitempty" tf:"disk_label,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type SdbParameters struct { @@ -504,6 +765,18 @@ type SdbParameters struct { } type SdcObservation struct { + + // (Computed) The Disk ID of the associated disk_label, if used. + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The label of the disk to map to this device slot. + // The `label` of the `disk` to map to this `device` slot. + DiskLabel *string `json:"diskLabel,omitempty" tf:"disk_label,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type SdcParameters struct { @@ -525,6 +798,18 @@ type SdcParameters struct { } type SddObservation struct { + + // (Computed) The Disk ID of the associated disk_label, if used. + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The label of the disk to map to this device slot. + // The `label` of the `disk` to map to this `device` slot. + DiskLabel *string `json:"diskLabel,omitempty" tf:"disk_label,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type SddParameters struct { @@ -546,6 +831,18 @@ type SddParameters struct { } type SdeObservation struct { + + // (Computed) The Disk ID of the associated disk_label, if used. + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The label of the disk to map to this device slot. + // The `label` of the `disk` to map to this `device` slot. + DiskLabel *string `json:"diskLabel,omitempty" tf:"disk_label,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type SdeParameters struct { @@ -567,6 +864,18 @@ type SdeParameters struct { } type SdfObservation struct { + + // (Computed) The Disk ID of the associated disk_label, if used. + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The label of the disk to map to this device slot. + // The `label` of the `disk` to map to this `device` slot. + DiskLabel *string `json:"diskLabel,omitempty" tf:"disk_label,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type SdfParameters struct { @@ -588,6 +897,18 @@ type SdfParameters struct { } type SdgObservation struct { + + // (Computed) The Disk ID of the associated disk_label, if used. + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The label of the disk to map to this device slot. + // The `label` of the `disk` to map to this `device` slot. + DiskLabel *string `json:"diskLabel,omitempty" tf:"disk_label,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type SdgParameters struct { @@ -609,6 +930,18 @@ type SdgParameters struct { } type SdhObservation struct { + + // (Computed) The Disk ID of the associated disk_label, if used. + // The Disk ID to map to this disk slot + DiskID *float64 `json:"diskId,omitempty" tf:"disk_id,omitempty"` + + // The label of the disk to map to this device slot. + // The `label` of the `disk` to map to this `device` slot. + DiskLabel *string `json:"diskLabel,omitempty" tf:"disk_label,omitempty"` + + // The Volume ID to map to this device slot. + // The Block Storage volume ID to map to this disk slot + VolumeID *float64 `json:"volumeId,omitempty" tf:"volume_id,omitempty"` } type SdhParameters struct { @@ -671,8 +1004,9 @@ type InstanceStatus struct { type Instance struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec InstanceSpec `json:"spec"` - Status InstanceStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region)",message="region is a required parameter" + Spec InstanceSpec `json:"spec"` + Status InstanceStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/instance/v1alpha1/zz_ip_types.go b/apis/instance/v1alpha1/zz_ip_types.go index b0e4920..51f8618 100755 --- a/apis/instance/v1alpha1/zz_ip_types.go +++ b/apis/instance/v1alpha1/zz_ip_types.go @@ -19,16 +19,32 @@ type IPObservation struct { // The resulting IPv4 address. Address *string `json:"address,omitempty" tf:"address,omitempty"` + // If true, the instance will be rebooted to update network interfaces. + // If true, the instance will be rebooted to update network interfaces. + ApplyImmediately *bool `json:"applyImmediately,omitempty" tf:"apply_immediately,omitempty"` + // The default gateway for this address // The default gateway for this address Gateway *string `json:"gateway,omitempty" tf:"gateway,omitempty"` ID *string `json:"id,omitempty" tf:"id,omitempty"` + // The ID of the Linode to allocate an IPv4 address for. + // The ID of the Linode to allocate an IPv4 address for. + LinodeID *float64 `json:"linodeId,omitempty" tf:"linode_id,omitempty"` + // The number of bits set in the subnet mask. // The number of bits set in the subnet mask. Prefix *float64 `json:"prefix,omitempty" tf:"prefix,omitempty"` + // Whether the IPv4 address is public or private. Defaults to true. + // Whether the IPv4 address is public or private. + Public *bool `json:"public,omitempty" tf:"public,omitempty"` + + // The reverse DNS assigned to this address. + // The reverse DNS assigned to this address. + Rdns *string `json:"rdns,omitempty" tf:"rdns,omitempty"` + // The region this IP resides in. // The region this IP resides in. Region *string `json:"region,omitempty" tf:"region,omitempty"` diff --git a/apis/instance/v1alpha1/zz_sharedips_types.go b/apis/instance/v1alpha1/zz_sharedips_types.go index 9bb753a..f6a22eb 100755 --- a/apis/instance/v1alpha1/zz_sharedips_types.go +++ b/apis/instance/v1alpha1/zz_sharedips_types.go @@ -14,15 +14,24 @@ import ( ) type SharedIPsObservation struct { + + // The set of IPs to share with the Linode. + // A set of IP addresses to share to the Linode + Addresses []*string `json:"addresses,omitempty" tf:"addresses,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // The ID of the Linode to share the IPs to. + // The ID of the Linode to share these IP addresses with. + LinodeID *float64 `json:"linodeId,omitempty" tf:"linode_id,omitempty"` } type SharedIPsParameters struct { // The set of IPs to share with the Linode. // A set of IP addresses to share to the Linode - // +kubebuilder:validation:Required - Addresses []*string `json:"addresses" tf:"addresses,omitempty"` + // +kubebuilder:validation:Optional + Addresses []*string `json:"addresses,omitempty" tf:"addresses,omitempty"` // The ID of the Linode to share the IPs to. // The ID of the Linode to share these IP addresses with. @@ -63,8 +72,9 @@ type SharedIPsStatus struct { type SharedIPs struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec SharedIPsSpec `json:"spec"` - Status SharedIPsStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.addresses)",message="addresses is a required parameter" + Spec SharedIPsSpec `json:"spec"` + Status SharedIPsStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/ipv6/v1alpha1/zz_generated.deepcopy.go b/apis/ipv6/v1alpha1/zz_generated.deepcopy.go index 0b5731e..9a54df1 100644 --- a/apis/ipv6/v1alpha1/zz_generated.deepcopy.go +++ b/apis/ipv6/v1alpha1/zz_generated.deepcopy.go @@ -86,6 +86,11 @@ func (in *IPv6RangeObservation) DeepCopyInto(out *IPv6RangeObservation) { *out = new(bool) **out = **in } + if in.LinodeID != nil { + in, out := &in.LinodeID, &out.LinodeID + *out = new(float64) + **out = **in + } if in.Linodes != nil { in, out := &in.Linodes, &out.Linodes *out = make([]*float64, len(*in)) @@ -97,6 +102,11 @@ func (in *IPv6RangeObservation) DeepCopyInto(out *IPv6RangeObservation) { } } } + if in.PrefixLength != nil { + in, out := &in.PrefixLength, &out.PrefixLength + *out = new(float64) + **out = **in + } if in.Range != nil { in, out := &in.Range, &out.Range *out = new(string) @@ -107,6 +117,11 @@ func (in *IPv6RangeObservation) DeepCopyInto(out *IPv6RangeObservation) { *out = new(string) **out = **in } + if in.RouteTarget != nil { + in, out := &in.RouteTarget, &out.RouteTarget + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPv6RangeObservation. diff --git a/apis/ipv6/v1alpha1/zz_generated.managed.go b/apis/ipv6/v1alpha1/zz_generated.managed.go index d6a66ad..49fe1fe 100644 --- a/apis/ipv6/v1alpha1/zz_generated.managed.go +++ b/apis/ipv6/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *IPv6Range) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this IPv6Range. +func (mg *IPv6Range) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this IPv6Range. func (mg *IPv6Range) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *IPv6Range) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this IPv6Range. +func (mg *IPv6Range) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this IPv6Range. func (mg *IPv6Range) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/ipv6/v1alpha1/zz_ipv6range_types.go b/apis/ipv6/v1alpha1/zz_ipv6range_types.go index 8227b52..fe3cd54 100755 --- a/apis/ipv6/v1alpha1/zz_ipv6range_types.go +++ b/apis/ipv6/v1alpha1/zz_ipv6range_types.go @@ -20,10 +20,18 @@ type IPv6RangeObservation struct { // Whether this IPv6 range is shared. IsBGP *bool `json:"isBgp,omitempty" tf:"is_bgp,omitempty"` + // The ID of the Linode to assign this range to. This field may be updated to reassign the IPv6 range. + // The ID of the Linode to assign this range to. + LinodeID *float64 `json:"linodeId,omitempty" tf:"linode_id,omitempty"` + // A list of Linodes targeted by this IPv6 range. Includes Linodes with IP sharing. // A list of Linodes targeted by this IPv6 range. Includes Linodes with IP sharing. Linodes []*float64 `json:"linodes,omitempty" tf:"linodes,omitempty"` + // The prefix length of the IPv6 range. + // The prefix length of the IPv6 range. + PrefixLength *float64 `json:"prefixLength,omitempty" tf:"prefix_length,omitempty"` + // The IPv6 range of addresses in this pool. // The IPv6 range of addresses in this pool. Range *string `json:"range,omitempty" tf:"range,omitempty"` @@ -31,6 +39,10 @@ type IPv6RangeObservation struct { // The region for this range of IPv6 addresses. // The region for this range of IPv6 addresses. Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // The IPv6 SLAAC address to assign this range to. + // The IPv6 SLAAC address to assign this range to. + RouteTarget *string `json:"routeTarget,omitempty" tf:"route_target,omitempty"` } type IPv6RangeParameters struct { @@ -51,8 +63,8 @@ type IPv6RangeParameters struct { // The prefix length of the IPv6 range. // The prefix length of the IPv6 range. - // +kubebuilder:validation:Required - PrefixLength *float64 `json:"prefixLength" tf:"prefix_length,omitempty"` + // +kubebuilder:validation:Optional + PrefixLength *float64 `json:"prefixLength,omitempty" tf:"prefix_length,omitempty"` // The IPv6 SLAAC address to assign this range to. // The IPv6 SLAAC address to assign this range to. @@ -84,8 +96,9 @@ type IPv6RangeStatus struct { type IPv6Range struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec IPv6RangeSpec `json:"spec"` - Status IPv6RangeStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.prefixLength)",message="prefixLength is a required parameter" + Spec IPv6RangeSpec `json:"spec"` + Status IPv6RangeStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/lke/v1alpha1/zz_cluster_types.go b/apis/lke/v1alpha1/zz_cluster_types.go index fe3fc67..dbca42c 100755 --- a/apis/lke/v1alpha1/zz_cluster_types.go +++ b/apis/lke/v1alpha1/zz_cluster_types.go @@ -14,6 +14,14 @@ import ( ) type AutoscalerObservation struct { + + // The maximum number of nodes to autoscale to. + // The maximum number of nodes to autoscale to. + Max *float64 `json:"max,omitempty" tf:"max,omitempty"` + + // The minimum number of nodes to autoscale to. + // The minimum number of nodes to autoscale to. + Min *float64 `json:"min,omitempty" tf:"min,omitempty"` } type AutoscalerParameters struct { @@ -35,6 +43,9 @@ type ClusterObservation struct { // The API endpoints for the cluster. APIEndpoints []*string `json:"apiEndpoints,omitempty" tf:"api_endpoints,omitempty"` + // Defines settings for the Kubernetes Control Plane. + ControlPlane []ControlPlaneObservation `json:"controlPlane,omitempty" tf:"control_plane,omitempty"` + // The Kubernetes Dashboard access URL for this cluster. // The dashboard URL of the cluster. DashboardURL *string `json:"dashboardUrl,omitempty" tf:"dashboard_url,omitempty"` @@ -42,14 +53,29 @@ type ClusterObservation struct { // The ID of the cluster. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // The desired Kubernetes version for this Kubernetes cluster in the format of major.minor (e.g. 1.21), and the latest supported patch version will be deployed. + // The desired Kubernetes version for this Kubernetes cluster in the format of .. The latest supported patch version will be deployed. + K8SVersion *string `json:"k8sVersion,omitempty" tf:"k8s_version,omitempty"` + + // This Kubernetes cluster's unique label. + // The unique label for the cluster. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + // Additional nested attributes: // A node pool in the cluster. - // +kubebuilder:validation:Required Pool []PoolObservation `json:"pool,omitempty" tf:"pool,omitempty"` + // This Kubernetes cluster's location. + // This cluster's location. + Region *string `json:"region,omitempty" tf:"region,omitempty"` + // The status of the cluster. // The status of the cluster. Status *string `json:"status,omitempty" tf:"status,omitempty"` + + // An array of tags applied to the Kubernetes cluster. Tags are for organizational purposes only. + // An array of tags applied to this object. Tags are for organizational purposes only. + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` } type ClusterParameters struct { @@ -60,23 +86,23 @@ type ClusterParameters struct { // The desired Kubernetes version for this Kubernetes cluster in the format of major.minor (e.g. 1.21), and the latest supported patch version will be deployed. // The desired Kubernetes version for this Kubernetes cluster in the format of .. The latest supported patch version will be deployed. - // +kubebuilder:validation:Required - K8SVersion *string `json:"k8sVersion" tf:"k8s_version,omitempty"` + // +kubebuilder:validation:Optional + K8SVersion *string `json:"k8sVersion,omitempty" tf:"k8s_version,omitempty"` // This Kubernetes cluster's unique label. // The unique label for the cluster. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // Additional nested attributes: // A node pool in the cluster. - // +kubebuilder:validation:Required - Pool []PoolParameters `json:"pool" tf:"pool,omitempty"` + // +kubebuilder:validation:Optional + Pool []PoolParameters `json:"pool,omitempty" tf:"pool,omitempty"` // This Kubernetes cluster's location. // This cluster's location. - // +kubebuilder:validation:Required - Region *string `json:"region" tf:"region,omitempty"` + // +kubebuilder:validation:Optional + Region *string `json:"region,omitempty" tf:"region,omitempty"` // An array of tags applied to the Kubernetes cluster. Tags are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. @@ -85,6 +111,10 @@ type ClusterParameters struct { } type ControlPlaneObservation struct { + + // Defines whether High Availability is enabled for the cluster Control Plane. This is an irreversible change. + // Defines whether High Availability is enabled for the Control Plane Components of the cluster. + HighAvailability *bool `json:"highAvailability,omitempty" tf:"high_availability,omitempty"` } type ControlPlaneParameters struct { @@ -112,12 +142,23 @@ type NodesParameters struct { type PoolObservation struct { + // When specified, the number of nodes autoscales within the defined minimum and maximum values. + Autoscaler []AutoscalerObservation `json:"autoscaler,omitempty" tf:"autoscaler,omitempty"` + + // The number of nodes in the Node Pool. + // The number of nodes in the Node Pool. + Count *float64 `json:"count,omitempty" tf:"count,omitempty"` + // The ID of the cluster. // The ID of the Node Pool. ID *float64 `json:"id,omitempty" tf:"id,omitempty"` // The nodes in the node pool. Nodes []NodesObservation `json:"nodes,omitempty" tf:"nodes,omitempty"` + + // A Linode Type for all of the nodes in the Node Pool. See all node types here. + // A Linode Type for all of the nodes in the Node Pool. + Type *string `json:"type,omitempty" tf:"type,omitempty"` } type PoolParameters struct { @@ -161,8 +202,12 @@ type ClusterStatus struct { type Cluster struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ClusterSpec `json:"spec"` - Status ClusterStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.k8sVersion)",message="k8sVersion is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.pool)",message="pool is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region)",message="region is a required parameter" + Spec ClusterSpec `json:"spec"` + Status ClusterStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/lke/v1alpha1/zz_generated.deepcopy.go b/apis/lke/v1alpha1/zz_generated.deepcopy.go index 75d15fc..d2bcfb7 100644 --- a/apis/lke/v1alpha1/zz_generated.deepcopy.go +++ b/apis/lke/v1alpha1/zz_generated.deepcopy.go @@ -16,6 +16,16 @@ import ( // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AutoscalerObservation) DeepCopyInto(out *AutoscalerObservation) { *out = *in + if in.Max != nil { + in, out := &in.Max, &out.Max + *out = new(float64) + **out = **in + } + if in.Min != nil { + in, out := &in.Min, &out.Min + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AutoscalerObservation. @@ -126,6 +136,13 @@ func (in *ClusterObservation) DeepCopyInto(out *ClusterObservation) { } } } + if in.ControlPlane != nil { + in, out := &in.ControlPlane, &out.ControlPlane + *out = make([]ControlPlaneObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.DashboardURL != nil { in, out := &in.DashboardURL, &out.DashboardURL *out = new(string) @@ -136,6 +153,16 @@ func (in *ClusterObservation) DeepCopyInto(out *ClusterObservation) { *out = new(string) **out = **in } + if in.K8SVersion != nil { + in, out := &in.K8SVersion, &out.K8SVersion + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } if in.Pool != nil { in, out := &in.Pool, &out.Pool *out = make([]PoolObservation, len(*in)) @@ -143,11 +170,27 @@ func (in *ClusterObservation) DeepCopyInto(out *ClusterObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) **out = **in } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *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 ClusterObservation. @@ -252,6 +295,11 @@ func (in *ClusterStatus) DeepCopy() *ClusterStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ControlPlaneObservation) DeepCopyInto(out *ControlPlaneObservation) { *out = *in + if in.HighAvailability != nil { + in, out := &in.HighAvailability, &out.HighAvailability + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneObservation. @@ -332,6 +380,18 @@ func (in *NodesParameters) DeepCopy() *NodesParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PoolObservation) DeepCopyInto(out *PoolObservation) { *out = *in + if in.Autoscaler != nil { + in, out := &in.Autoscaler, &out.Autoscaler + *out = make([]AutoscalerObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Count != nil { + in, out := &in.Count, &out.Count + *out = new(float64) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(float64) @@ -344,6 +404,11 @@ func (in *PoolObservation) DeepCopyInto(out *PoolObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PoolObservation. diff --git a/apis/lke/v1alpha1/zz_generated.managed.go b/apis/lke/v1alpha1/zz_generated.managed.go index cb9a75e..71aacbf 100644 --- a/apis/lke/v1alpha1/zz_generated.managed.go +++ b/apis/lke/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *Cluster) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Cluster. +func (mg *Cluster) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Cluster. func (mg *Cluster) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *Cluster) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Cluster. +func (mg *Cluster) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Cluster. func (mg *Cluster) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/nodebalancer/v1alpha1/zz_config_types.go b/apis/nodebalancer/v1alpha1/zz_config_types.go index 4856da4..665fa7a 100755 --- a/apis/nodebalancer/v1alpha1/zz_config_types.go +++ b/apis/nodebalancer/v1alpha1/zz_config_types.go @@ -14,11 +14,63 @@ import ( ) type ConfigObservation struct { + + // What algorithm this NodeBalancer should use for routing traffic to backends. (roundrobin, leastconn, source) + // What algorithm this NodeBalancer should use for routing traffic to backends: roundrobin, leastconn, source + Algorithm *string `json:"algorithm,omitempty" tf:"algorithm,omitempty"` + + // The type of check to perform against backends to ensure they are serving requests. This is used to determine if backends are up or down. If none no check is performed. connection requires only a connection to the backend to succeed. http and http_body rely on the backend serving HTTP, and that the response returned matches what is expected. (none, connection, http, http_body) + // The type of check to perform against backends to ensure they are serving requests. This is used to determine if backends are up or down. If none no check is performed. connection requires only a connection to the backend to succeed. http and http_body rely on the backend serving HTTP, and that the response returned matches what is expected. + Check *string `json:"check,omitempty" tf:"check,omitempty"` + + // How many times to attempt a check before considering a backend to be down. (1-30) + // How many times to attempt a check before considering a backend to be down. (1-30) + CheckAttempts *float64 `json:"checkAttempts,omitempty" tf:"check_attempts,omitempty"` + + // This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down + CheckBody *string `json:"checkBody,omitempty" tf:"check_body,omitempty"` + + // How often, in seconds, to check that backends are up and serving requests. + // How often, in seconds, to check that backends are up and serving requests. + CheckInterval *float64 `json:"checkInterval,omitempty" tf:"check_interval,omitempty"` + + // If true, any response from this backend with a 5xx status code will be enough for it to be considered unhealthy and taken out of rotation. + // If true, any response from this backend with a 5xx status code will be enough for it to be considered unhealthy and taken out of rotation. + CheckPassive *bool `json:"checkPassive,omitempty" tf:"check_passive,omitempty"` + + // The URL path to check on each backend. If the backend does not respond to this request it is considered to be down. + // The URL path to check on each backend. If the backend does not respond to this request it is considered to be down. + CheckPath *string `json:"checkPath,omitempty" tf:"check_path,omitempty"` + + // How long, in seconds, to wait for a check attempt before considering it failed. (1-30) + // How long, in seconds, to wait for a check attempt before considering it failed. (1-30) + CheckTimeout *float64 `json:"checkTimeout,omitempty" tf:"check_timeout,omitempty"` + + // What ciphers to use for SSL connections served by this NodeBalancer. legacy is considered insecure and should only be used if necessary. + // What ciphers to use for SSL connections served by this NodeBalancer. `legacy` is considered insecure and should only be used if necessary. + CipherSuite *string `json:"cipherSuite,omitempty" tf:"cipher_suite,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` // A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends. NodeStatus []NodeStatusObservation `json:"nodeStatus,omitempty" tf:"node_status,omitempty"` + // The ID of the NodeBalancer to access. + // The ID of the NodeBalancer to access. + NodebalancerID *float64 `json:"nodebalancerId,omitempty" tf:"nodebalancer_id,omitempty"` + + // The TCP port this Config is for. These values must be unique across configs on a single NodeBalancer (you can't have two configs for port 80, for example). While some ports imply some protocols, no enforcement is done and you may configure your NodeBalancer however is useful to you. For example, while port 443 is generally used for HTTPS, you do not need SSL configured to have a NodeBalancer listening on port 443. (Defaults to 80) + // The TCP port this Config is for. These values must be unique across configs on a single NodeBalancer (you can't have two configs for port 80, for example). While some ports imply some protocols, no enforcement is done and you may configure your NodeBalancer however is useful to you. For example, while port 443 is generally used for HTTPS, you do not need SSL configured to have a NodeBalancer listening on port 443. + Port *float64 `json:"port,omitempty" tf:"port,omitempty"` + + // The protocol this port is configured to serve. If this is set to https you must include an ssl_cert and an ssl_key. (http, https, tcp) (Defaults to http) + // The protocol this port is configured to serve. If this is set to https you must include an ssl_cert and an ssl_key. + Protocol *string `json:"protocol,omitempty" tf:"protocol,omitempty"` + + // The version of ProxyProtocol to use for the underlying NodeBalancer. This requires protocol to be tcp. (none, v1, v2) (Defaults to none) + // The version of ProxyProtocol to use for the underlying NodeBalancer. This requires protocol to be `tcp`. Valid values are `none`, `v1`, and `v2`. + ProxyProtocol *string `json:"proxyProtocol,omitempty" tf:"proxy_protocol,omitempty"` + // The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig. // The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig. SSLCommonname *string `json:"sslCommonname,omitempty" tf:"ssl_commonname,omitempty"` @@ -26,6 +78,10 @@ type ConfigObservation struct { // The read-only fingerprint automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig. // The read-only fingerprint automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig. SSLFingerprint *string `json:"sslFingerprint,omitempty" tf:"ssl_fingerprint,omitempty"` + + // Controls how session stickiness is handled on this port. (none, table, http_cookie) + // Controls how session stickiness is handled on this port: 'none', 'table', 'http_cookie' + Stickiness *string `json:"stickiness,omitempty" tf:"stickiness,omitempty"` } type ConfigParameters struct { diff --git a/apis/nodebalancer/v1alpha1/zz_generated.deepcopy.go b/apis/nodebalancer/v1alpha1/zz_generated.deepcopy.go index 03f21c1..a1ffd0a 100644 --- a/apis/nodebalancer/v1alpha1/zz_generated.deepcopy.go +++ b/apis/nodebalancer/v1alpha1/zz_generated.deepcopy.go @@ -76,6 +76,51 @@ func (in *ConfigList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConfigObservation) DeepCopyInto(out *ConfigObservation) { *out = *in + if in.Algorithm != nil { + in, out := &in.Algorithm, &out.Algorithm + *out = new(string) + **out = **in + } + if in.Check != nil { + in, out := &in.Check, &out.Check + *out = new(string) + **out = **in + } + if in.CheckAttempts != nil { + in, out := &in.CheckAttempts, &out.CheckAttempts + *out = new(float64) + **out = **in + } + if in.CheckBody != nil { + in, out := &in.CheckBody, &out.CheckBody + *out = new(string) + **out = **in + } + if in.CheckInterval != nil { + in, out := &in.CheckInterval, &out.CheckInterval + *out = new(float64) + **out = **in + } + if in.CheckPassive != nil { + in, out := &in.CheckPassive, &out.CheckPassive + *out = new(bool) + **out = **in + } + if in.CheckPath != nil { + in, out := &in.CheckPath, &out.CheckPath + *out = new(string) + **out = **in + } + if in.CheckTimeout != nil { + in, out := &in.CheckTimeout, &out.CheckTimeout + *out = new(float64) + **out = **in + } + if in.CipherSuite != nil { + in, out := &in.CipherSuite, &out.CipherSuite + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) @@ -88,6 +133,26 @@ func (in *ConfigObservation) DeepCopyInto(out *ConfigObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.NodebalancerID != nil { + in, out := &in.NodebalancerID, &out.NodebalancerID + *out = new(float64) + **out = **in + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = new(float64) + **out = **in + } + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(string) + **out = **in + } + if in.ProxyProtocol != nil { + in, out := &in.ProxyProtocol, &out.ProxyProtocol + *out = new(string) + **out = **in + } if in.SSLCommonname != nil { in, out := &in.SSLCommonname, &out.SSLCommonname *out = new(string) @@ -98,6 +163,11 @@ func (in *ConfigObservation) DeepCopyInto(out *ConfigObservation) { *out = new(string) **out = **in } + if in.Stickiness != nil { + in, out := &in.Stickiness, &out.Stickiness + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigObservation. @@ -311,16 +381,46 @@ func (in *NodeList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NodeObservation) DeepCopyInto(out *NodeObservation) { *out = *in + if in.Address != nil { + in, out := &in.Address, &out.Address + *out = new(string) + **out = **in + } + if in.ConfigID != nil { + in, out := &in.ConfigID, &out.ConfigID + *out = new(float64) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(string) + **out = **in + } + if in.NodebalancerID != nil { + in, out := &in.NodebalancerID, &out.NodebalancerID + *out = new(float64) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) **out = **in } + if in.Weight != nil { + in, out := &in.Weight, &out.Weight + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeObservation. @@ -534,6 +634,11 @@ func (in *NodebalancerList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NodebalancerObservation) DeepCopyInto(out *NodebalancerObservation) { *out = *in + if in.ClientConnThrottle != nil { + in, out := &in.ClientConnThrottle, &out.ClientConnThrottle + *out = new(float64) + **out = **in + } if in.Created != nil { in, out := &in.Created, &out.Created *out = new(string) @@ -559,6 +664,27 @@ func (in *NodebalancerObservation) DeepCopyInto(out *NodebalancerObservation) { *out = new(string) **out = **in } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *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.Transfer != nil { in, out := &in.Transfer, &out.Transfer *out = make([]TransferObservation, len(*in)) diff --git a/apis/nodebalancer/v1alpha1/zz_generated.managed.go b/apis/nodebalancer/v1alpha1/zz_generated.managed.go index d668820..fc5de20 100644 --- a/apis/nodebalancer/v1alpha1/zz_generated.managed.go +++ b/apis/nodebalancer/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *Config) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Config. +func (mg *Config) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Config. func (mg *Config) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *Config) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Config. +func (mg *Config) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Config. func (mg *Config) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -83,6 +93,11 @@ func (mg *Node) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Node. +func (mg *Node) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Node. func (mg *Node) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -116,6 +131,11 @@ func (mg *Node) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Node. +func (mg *Node) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Node. func (mg *Node) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -149,6 +169,11 @@ func (mg *Nodebalancer) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Nodebalancer. +func (mg *Nodebalancer) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Nodebalancer. func (mg *Nodebalancer) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -182,6 +207,11 @@ func (mg *Nodebalancer) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Nodebalancer. +func (mg *Nodebalancer) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Nodebalancer. func (mg *Nodebalancer) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/nodebalancer/v1alpha1/zz_node_types.go b/apis/nodebalancer/v1alpha1/zz_node_types.go index 4b44d83..e6180dc 100755 --- a/apis/nodebalancer/v1alpha1/zz_node_types.go +++ b/apis/nodebalancer/v1alpha1/zz_node_types.go @@ -14,19 +14,44 @@ import ( ) type NodeObservation struct { + + // The private IP Address where this backend can be reached. This must be a private IP address. + // The private IP Address and port (IP:PORT) where this backend can be reached. This must be a private IP address. + Address *string `json:"address,omitempty" tf:"address,omitempty"` + + // The ID of the NodeBalancerConfig to access. + // The ID of the NodeBalancerConfig to access. + ConfigID *float64 `json:"configId,omitempty" tf:"config_id,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + // The label of the Linode NodeBalancer Node. This is for display purposes only. + // The label for this node. This is for display purposes only. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The mode this NodeBalancer should use when sending traffic to this backend. If set to accept this backend is accepting traffic. If set to reject this backend will not receive traffic. If set to drain this backend will not receive new traffic, but connections already pinned to it will continue to be routed to it. (accept, reject, drain, backup) + // The mode this NodeBalancer should use when sending traffic to this backend. If set to `accept` this backend is accepting traffic. If set to `reject` this backend will not receive traffic. If set to `drain` this backend will not receive new traffic, but connections already pinned to it will continue to be routed to it. If set to `backup` this backend will only accept traffic if all other nodes are down. + Mode *string `json:"mode,omitempty" tf:"mode,omitempty"` + + // The ID of the NodeBalancer to access. + // The ID of the NodeBalancer to access. + NodebalancerID *float64 `json:"nodebalancerId,omitempty" tf:"nodebalancer_id,omitempty"` + // The current status of this node, based on the configured checks of its NodeBalancer Config. (unknown, UP, DOWN). // The current status of this node, based on the configured checks of its NodeBalancer Config. (unknown, UP, DOWN) Status *string `json:"status,omitempty" tf:"status,omitempty"` + + // Used when picking a backend to serve a request and is not pinned to a single backend yet. Nodes with a higher weight will receive more traffic. (1-255). + // Used when picking a backend to serve a request and is not pinned to a single backend yet. Nodes with a higher weight will receive more traffic. (1-255) + Weight *float64 `json:"weight,omitempty" tf:"weight,omitempty"` } type NodeParameters struct { // The private IP Address where this backend can be reached. This must be a private IP address. // The private IP Address and port (IP:PORT) where this backend can be reached. This must be a private IP address. - // +kubebuilder:validation:Required - Address *string `json:"address" tf:"address,omitempty"` + // +kubebuilder:validation:Optional + Address *string `json:"address,omitempty" tf:"address,omitempty"` // The ID of the NodeBalancerConfig to access. // The ID of the NodeBalancerConfig to access. @@ -44,8 +69,8 @@ type NodeParameters struct { // The label of the Linode NodeBalancer Node. This is for display purposes only. // The label for this node. This is for display purposes only. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // The mode this NodeBalancer should use when sending traffic to this backend. If set to accept this backend is accepting traffic. If set to reject this backend will not receive traffic. If set to drain this backend will not receive new traffic, but connections already pinned to it will continue to be routed to it. (accept, reject, drain, backup) // The mode this NodeBalancer should use when sending traffic to this backend. If set to `accept` this backend is accepting traffic. If set to `reject` this backend will not receive traffic. If set to `drain` this backend will not receive new traffic, but connections already pinned to it will continue to be routed to it. If set to `backup` this backend will only accept traffic if all other nodes are down. @@ -96,8 +121,10 @@ type NodeStatus struct { type Node struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec NodeSpec `json:"spec"` - Status NodeStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.address)",message="address is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + Spec NodeSpec `json:"spec"` + Status NodeStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/nodebalancer/v1alpha1/zz_nodebalancer_types.go b/apis/nodebalancer/v1alpha1/zz_nodebalancer_types.go index bd6cb33..9c10b95 100755 --- a/apis/nodebalancer/v1alpha1/zz_nodebalancer_types.go +++ b/apis/nodebalancer/v1alpha1/zz_nodebalancer_types.go @@ -15,6 +15,10 @@ import ( type NodebalancerObservation struct { + // Throttle connections per second (0-20). Set to 0 (default) to disable throttling. + // Throttle connections per second (0-20). Set to 0 (zero) to disable throttling. + ClientConnThrottle *float64 `json:"clientConnThrottle,omitempty" tf:"client_conn_throttle,omitempty"` + // When this NodeBalancer was created // When this NodeBalancer was created. Created *string `json:"created,omitempty" tf:"created,omitempty"` @@ -33,6 +37,18 @@ type NodebalancerObservation struct { // The Public IPv6 Address of this NodeBalancer IPv6 *string `json:"ipv6,omitempty" tf:"ipv6,omitempty"` + // The label of the Linode NodeBalancer + // The label of the Linode NodeBalancer. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The region where this NodeBalancer will be deployed. Examples are "us-east", "us-west", "ap-south", etc. See all regions here. Changing . + // The region where this NodeBalancer will be deployed. + Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // A list of tags applied to this object. Tags are for organizational purposes only. + // An array of tags applied to this object. Tags are for organizational purposes only. + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + // Information about the amount of transfer this NodeBalancer has had so far this month. Transfer []TransferObservation `json:"transfer,omitempty" tf:"transfer,omitempty"` @@ -55,8 +71,8 @@ type NodebalancerParameters struct { // The region where this NodeBalancer will be deployed. Examples are "us-east", "us-west", "ap-south", etc. See all regions here. Changing . // The region where this NodeBalancer will be deployed. - // +kubebuilder:validation:Required - Region *string `json:"region" tf:"region,omitempty"` + // +kubebuilder:validation:Optional + Region *string `json:"region,omitempty" tf:"region,omitempty"` // A list of tags applied to this object. Tags are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. @@ -103,8 +119,9 @@ type NodebalancerStatus struct { type Nodebalancer struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec NodebalancerSpec `json:"spec"` - Status NodebalancerStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region)",message="region is a required parameter" + Spec NodebalancerSpec `json:"spec"` + Status NodebalancerStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/objectstorage/v1alpha1/zz_bucket_types.go b/apis/objectstorage/v1alpha1/zz_bucket_types.go index 3c5a7f5..61bf931 100755 --- a/apis/objectstorage/v1alpha1/zz_bucket_types.go +++ b/apis/objectstorage/v1alpha1/zz_bucket_types.go @@ -15,11 +15,45 @@ import ( type BucketObservation struct { + // The Access Control Level of the bucket using a canned ACL string. See all ACL strings in the Linode API v4 documentation. + // The Access Control Level of the bucket using a canned ACL string. + ACL *string `json:"acl,omitempty" tf:"acl,omitempty"` + + // The access key to authenticate with. + // The S3 access key to use for this resource. (Required for lifecycle_rule and versioning) + AccessKey *string `json:"accessKey,omitempty" tf:"access_key,omitempty"` + + // The cert used by this Object Storage Bucket. + Cert []CertParameters `json:"cert,omitempty" tf:"cert,omitempty"` + + // The cluster of the Linode Object Storage Bucket. + // The cluster of the Linode Object Storage Bucket. + Cluster *string `json:"cluster,omitempty" tf:"cluster,omitempty"` + + // If true, the bucket will have CORS enabled for all origins. + // If true, the bucket will be created with CORS enabled for all origins. + CorsEnabled *bool `json:"corsEnabled,omitempty" tf:"cors_enabled,omitempty"` + // The hostname where this bucket can be accessed. This hostname can be accessed through a browser if the bucket is made public. Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` // The unique identifier for the rule. ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // The label of the Linode Object Storage Bucket. + // The label of the Linode Object Storage Bucket. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // Lifecycle rules to be applied to the bucket. + LifecycleRule []LifecycleRuleObservation `json:"lifecycleRule,omitempty" tf:"lifecycle_rule,omitempty"` + + // The secret key to authenticate with. + // The S3 secret key to use for this resource. (Required for lifecycle_rule and versioning) + SecretKey *string `json:"secretKey,omitempty" tf:"secret_key,omitempty"` + + // Whether to enable versioning. Once you version-enable a bucket, it can never return to an unversioned state. You can, however, suspend versioning on that bucket. (Requires access_key and secret_key) + // Whether to enable versioning. + Versioning *bool `json:"versioning,omitempty" tf:"versioning,omitempty"` } type BucketParameters struct { @@ -51,8 +85,8 @@ type BucketParameters struct { // The cluster of the Linode Object Storage Bucket. // The cluster of the Linode Object Storage Bucket. - // +kubebuilder:validation:Required - Cluster *string `json:"cluster" tf:"cluster,omitempty"` + // +kubebuilder:validation:Optional + Cluster *string `json:"cluster,omitempty" tf:"cluster,omitempty"` // If true, the bucket will have CORS enabled for all origins. // If true, the bucket will be created with CORS enabled for all origins. @@ -61,8 +95,8 @@ type BucketParameters struct { // The label of the Linode Object Storage Bucket. // The label of the Linode Object Storage Bucket. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // Lifecycle rules to be applied to the bucket. // +kubebuilder:validation:Optional @@ -107,6 +141,18 @@ type CertParameters struct { } type ExpirationObservation struct { + + // Specifies the date after which you want the corresponding action to take effect. + // Specifies the date after which you want the corresponding action to take effect. + Date *string `json:"date,omitempty" tf:"date,omitempty"` + + // Specifies the number of days after object creation when the specific rule action takes effect. + // Specifies the number of days after object creation when the specific rule action takes effect. + Days *float64 `json:"days,omitempty" tf:"days,omitempty"` + + // On a versioned bucket (versioning-enabled or versioning-suspended bucket), you can add this element in the lifecycle configuration to direct Linode Object Storage to delete expired object delete markers. This cannot be specified with Days or Date in a Lifecycle Expiration Policy. + // Directs Linode Object Storage to remove expired deleted markers. + ExpiredObjectDeleteMarker *bool `json:"expiredObjectDeleteMarker,omitempty" tf:"expired_object_delete_marker,omitempty"` } type ExpirationParameters struct { @@ -128,6 +174,28 @@ type ExpirationParameters struct { } type LifecycleRuleObservation struct { + + // Specifies the number of days after initiating a multipart upload when the multipart upload must be completed. + // Specifies the number of days after initiating a multipart upload when the multipart upload must be completed. + AbortIncompleteMultipartUploadDays *float64 `json:"abortIncompleteMultipartUploadDays,omitempty" tf:"abort_incomplete_multipart_upload_days,omitempty"` + + // Specifies whether the lifecycle rule is active. + // Specifies whether the lifecycle rule is active. + Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` + + // Specifies a period in the object's expire. + Expiration []ExpirationObservation `json:"expiration,omitempty" tf:"expiration,omitempty"` + + // The unique identifier for the rule. + // The unique identifier for the rule. + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // Specifies when non-current object versions expire. + NoncurrentVersionExpiration []NoncurrentVersionExpirationObservation `json:"noncurrentVersionExpiration,omitempty" tf:"noncurrent_version_expiration,omitempty"` + + // The object key prefix identifying one or more objects to which the rule applies. + // The object key prefix identifying one or more objects to which the rule applies. + Prefix *string `json:"prefix,omitempty" tf:"prefix,omitempty"` } type LifecycleRuleParameters struct { @@ -162,6 +230,10 @@ type LifecycleRuleParameters struct { } type NoncurrentVersionExpirationObservation struct { + + // Specifies the number of days after object creation when the specific rule action takes effect. + // Specifies the number of days non-current object versions expire. + Days *float64 `json:"days,omitempty" tf:"days,omitempty"` } type NoncurrentVersionExpirationParameters struct { @@ -196,8 +268,10 @@ type BucketStatus struct { type Bucket struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec BucketSpec `json:"spec"` - Status BucketStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.cluster)",message="cluster is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + Spec BucketSpec `json:"spec"` + Status BucketStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/objectstorage/v1alpha1/zz_generated.deepcopy.go b/apis/objectstorage/v1alpha1/zz_generated.deepcopy.go index ca46ef2..4c42f65 100644 --- a/apis/objectstorage/v1alpha1/zz_generated.deepcopy.go +++ b/apis/objectstorage/v1alpha1/zz_generated.deepcopy.go @@ -44,6 +44,21 @@ func (in *Bucket) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BucketAccessObservation) DeepCopyInto(out *BucketAccessObservation) { *out = *in + if in.BucketName != nil { + in, out := &in.BucketName, &out.BucketName + *out = new(string) + **out = **in + } + if in.Cluster != nil { + in, out := &in.Cluster, &out.Cluster + *out = new(string) + **out = **in + } + if in.Permissions != nil { + in, out := &in.Permissions, &out.Permissions + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketAccessObservation. @@ -121,6 +136,31 @@ func (in *BucketList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BucketObservation) DeepCopyInto(out *BucketObservation) { *out = *in + if in.ACL != nil { + in, out := &in.ACL, &out.ACL + *out = new(string) + **out = **in + } + if in.AccessKey != nil { + in, out := &in.AccessKey, &out.AccessKey + *out = new(string) + **out = **in + } + if in.Cert != nil { + in, out := &in.Cert, &out.Cert + *out = make([]CertParameters, len(*in)) + copy(*out, *in) + } + if in.Cluster != nil { + in, out := &in.Cluster, &out.Cluster + *out = new(string) + **out = **in + } + if in.CorsEnabled != nil { + in, out := &in.CorsEnabled, &out.CorsEnabled + *out = new(bool) + **out = **in + } if in.Hostname != nil { in, out := &in.Hostname, &out.Hostname *out = new(string) @@ -131,6 +171,28 @@ func (in *BucketObservation) DeepCopyInto(out *BucketObservation) { *out = new(string) **out = **in } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.LifecycleRule != nil { + in, out := &in.LifecycleRule, &out.LifecycleRule + *out = make([]LifecycleRuleObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SecretKey != nil { + in, out := &in.SecretKey, &out.SecretKey + *out = new(string) + **out = **in + } + if in.Versioning != nil { + in, out := &in.Versioning, &out.Versioning + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketObservation. @@ -294,6 +356,21 @@ func (in *CertParameters) DeepCopy() *CertParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ExpirationObservation) DeepCopyInto(out *ExpirationObservation) { *out = *in + if in.Date != nil { + in, out := &in.Date, &out.Date + *out = new(string) + **out = **in + } + if in.Days != nil { + in, out := &in.Days, &out.Days + *out = new(float64) + **out = **in + } + if in.ExpiredObjectDeleteMarker != nil { + in, out := &in.ExpiredObjectDeleteMarker, &out.ExpiredObjectDeleteMarker + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExpirationObservation. @@ -398,11 +475,23 @@ func (in *KeyList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KeyObservation) DeepCopyInto(out *KeyObservation) { *out = *in + if in.BucketAccess != nil { + in, out := &in.BucketAccess, &out.BucketAccess + *out = make([]BucketAccessObservation, 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.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } if in.Limited != nil { in, out := &in.Limited, &out.Limited *out = new(bool) @@ -484,6 +573,40 @@ func (in *KeyStatus) DeepCopy() *KeyStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LifecycleRuleObservation) DeepCopyInto(out *LifecycleRuleObservation) { *out = *in + if in.AbortIncompleteMultipartUploadDays != nil { + in, out := &in.AbortIncompleteMultipartUploadDays, &out.AbortIncompleteMultipartUploadDays + *out = new(float64) + **out = **in + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + if in.Expiration != nil { + in, out := &in.Expiration, &out.Expiration + *out = make([]ExpirationObservation, 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.NoncurrentVersionExpiration != nil { + in, out := &in.NoncurrentVersionExpiration, &out.NoncurrentVersionExpiration + *out = make([]NoncurrentVersionExpirationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Prefix != nil { + in, out := &in.Prefix, &out.Prefix + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LifecycleRuleObservation. @@ -548,6 +671,11 @@ func (in *LifecycleRuleParameters) DeepCopy() *LifecycleRuleParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NoncurrentVersionExpirationObservation) DeepCopyInto(out *NoncurrentVersionExpirationObservation) { *out = *in + if in.Days != nil { + in, out := &in.Days, &out.Days + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NoncurrentVersionExpirationObservation. @@ -642,16 +770,116 @@ func (in *ObjectList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ObjectObservation) DeepCopyInto(out *ObjectObservation) { *out = *in + if in.ACL != nil { + in, out := &in.ACL, &out.ACL + *out = new(string) + **out = **in + } + if in.AccessKey != nil { + in, out := &in.AccessKey, &out.AccessKey + *out = new(string) + **out = **in + } + if in.Bucket != nil { + in, out := &in.Bucket, &out.Bucket + *out = new(string) + **out = **in + } + if in.CacheControl != nil { + in, out := &in.CacheControl, &out.CacheControl + *out = new(string) + **out = **in + } + if in.Cluster != nil { + in, out := &in.Cluster, &out.Cluster + *out = new(string) + **out = **in + } + if in.Content != nil { + in, out := &in.Content, &out.Content + *out = new(string) + **out = **in + } + if in.ContentBase64 != nil { + in, out := &in.ContentBase64, &out.ContentBase64 + *out = new(string) + **out = **in + } + if in.ContentDisposition != nil { + in, out := &in.ContentDisposition, &out.ContentDisposition + *out = new(string) + **out = **in + } + if in.ContentEncoding != nil { + in, out := &in.ContentEncoding, &out.ContentEncoding + *out = new(string) + **out = **in + } + if in.ContentLanguage != nil { + in, out := &in.ContentLanguage, &out.ContentLanguage + *out = new(string) + **out = **in + } + if in.ContentType != nil { + in, out := &in.ContentType, &out.ContentType + *out = new(string) + **out = **in + } + if in.Etag != nil { + in, out := &in.Etag, &out.Etag + *out = new(string) + **out = **in + } + if in.ForceDestroy != nil { + in, out := &in.ForceDestroy, &out.ForceDestroy + *out = new(bool) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.Key != nil { + in, out := &in.Key, &out.Key + *out = new(string) + **out = **in + } + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + in, out := &val, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.SecretKey != nil { + in, out := &in.SecretKey, &out.SecretKey + *out = new(string) + **out = **in + } + if in.Source != nil { + in, out := &in.Source, &out.Source + *out = new(string) + **out = **in + } if in.VersionID != nil { in, out := &in.VersionID, &out.VersionID *out = new(string) **out = **in } + if in.WebsiteRedirect != nil { + in, out := &in.WebsiteRedirect, &out.WebsiteRedirect + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectObservation. diff --git a/apis/objectstorage/v1alpha1/zz_generated.managed.go b/apis/objectstorage/v1alpha1/zz_generated.managed.go index 4e485a7..7e62e42 100644 --- a/apis/objectstorage/v1alpha1/zz_generated.managed.go +++ b/apis/objectstorage/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *Bucket) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Bucket. +func (mg *Bucket) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Bucket. func (mg *Bucket) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *Bucket) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Bucket. +func (mg *Bucket) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Bucket. func (mg *Bucket) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -83,6 +93,11 @@ func (mg *Key) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Key. +func (mg *Key) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Key. func (mg *Key) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -116,6 +131,11 @@ func (mg *Key) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Key. +func (mg *Key) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Key. func (mg *Key) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r @@ -149,6 +169,11 @@ func (mg *Object) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Object. +func (mg *Object) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Object. func (mg *Object) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -182,6 +207,11 @@ func (mg *Object) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Object. +func (mg *Object) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Object. func (mg *Object) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/objectstorage/v1alpha1/zz_key_types.go b/apis/objectstorage/v1alpha1/zz_key_types.go index 784a400..c2e3570 100755 --- a/apis/objectstorage/v1alpha1/zz_key_types.go +++ b/apis/objectstorage/v1alpha1/zz_key_types.go @@ -14,6 +14,18 @@ import ( ) type BucketAccessObservation struct { + + // The unique label of the bucket to which the key will grant limited access. + // The unique label of the bucket to which the key will grant limited access. + BucketName *string `json:"bucketName,omitempty" tf:"bucket_name,omitempty"` + + // The Object Storage cluster where a bucket to which the key is granting access is hosted. + // The Object Storage cluster where a bucket to which the key is granting access is hosted. + Cluster *string `json:"cluster,omitempty" tf:"cluster,omitempty"` + + // This Limited Access Key’s permissions for the selected bucket. Changing (read_write, read_only) + // This Limited Access Key’s permissions for the selected bucket. + Permissions *string `json:"permissions,omitempty" tf:"permissions,omitempty"` } type BucketAccessParameters struct { @@ -35,8 +47,17 @@ type BucketAccessParameters struct { } type KeyObservation struct { + + // Defines this key as a Limited Access Key. Limited Access Keys restrict this Object Storage key’s access to only the bucket(s) declared in this array and define their bucket-level permissions. Not providing this block will not limit this Object Storage Key. + // A list of permissions to grant this limited access key. + BucketAccess []BucketAccessObservation `json:"bucketAccess,omitempty" tf:"bucket_access,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + // The label given to this key. For display purposes only. + // The label given to this key. For display purposes only. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + // Whether or not this key is a limited access key. // Whether or not this key is a limited access key. Limited *bool `json:"limited,omitempty" tf:"limited,omitempty"` @@ -51,8 +72,8 @@ type KeyParameters struct { // The label given to this key. For display purposes only. // The label given to this key. For display purposes only. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` } // KeySpec defines the desired state of Key @@ -79,8 +100,9 @@ type KeyStatus struct { type Key struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec KeySpec `json:"spec"` - Status KeyStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + Spec KeySpec `json:"spec"` + Status KeyStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/objectstorage/v1alpha1/zz_object_types.go b/apis/objectstorage/v1alpha1/zz_object_types.go index 08ca226..92208fc 100755 --- a/apis/objectstorage/v1alpha1/zz_object_types.go +++ b/apis/objectstorage/v1alpha1/zz_object_types.go @@ -14,11 +14,84 @@ import ( ) type ObjectObservation struct { + + // The canned ACL to apply. (private, public-read, authenticated-read, public-read-write, custom) (defaults to private). + // The ACL config given to this object. + ACL *string `json:"acl,omitempty" tf:"acl,omitempty"` + + // The access key to authenticate with. + // The S3 access key with access to the target bucket. + AccessKey *string `json:"accessKey,omitempty" tf:"access_key,omitempty"` + + // The name of the bucket to put the object in. + // The target bucket to put this object in. + Bucket *string `json:"bucket,omitempty" tf:"bucket,omitempty"` + + // Specifies caching behavior along the request/reply chain Read w3c cache_control for further details. + // This cache_control configuration of this object. + CacheControl *string `json:"cacheControl,omitempty" tf:"cache_control,omitempty"` + + // The cluster the bucket is in. + // The target cluster that the bucket is in. + Cluster *string `json:"cluster,omitempty" tf:"cluster,omitempty"` + + // Literal string value to use as the object content, which will be uploaded as UTF-8-encoded text. + // The contents of the Object to upload. + Content *string `json:"content,omitempty" tf:"content,omitempty"` + + // Base64-encoded data that will be decoded and uploaded as raw bytes for the object content. This allows safely uploading non-UTF8 binary data, but is recommended only for small content such as the result of the gzipbase64 function with small text strings. For larger objects, use source to stream the content from a disk file. + // The base64 contents of the Object to upload. + ContentBase64 *string `json:"contentBase64,omitempty" tf:"content_base64,omitempty"` + + // Specifies presentational information for the object. Read w3c content_disposition for further information. + // The content disposition configuration of this object. + ContentDisposition *string `json:"contentDisposition,omitempty" tf:"content_disposition,omitempty"` + + // Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field. Read w3c content encoding for further information. + // The encoding of the content of this object. + ContentEncoding *string `json:"contentEncoding,omitempty" tf:"content_encoding,omitempty"` + + // The language the content is in e.g. en-US or en-GB. + // The language metadata of this object. + ContentLanguage *string `json:"contentLanguage,omitempty" tf:"content_language,omitempty"` + + // A standard MIME type describing the format of the object data, e.g. application/octet-stream. All Valid MIME Types are valid for this input. + // The MIME type of the content. + ContentType *string `json:"contentType,omitempty" tf:"content_type,omitempty"` + + // Used to trigger updates.11.11.11 or earlier). + // The specific version of this object. + Etag *string `json:"etag,omitempty" tf:"etag,omitempty"` + + // Allow the object to be deleted regardless of any legal hold or object lock (defaults to false). + // Whether the object should bypass deletion restrictions. + ForceDestroy *bool `json:"forceDestroy,omitempty" tf:"force_destroy,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + // They name of the object once it is in the bucket. + // The name of the uploaded object. + Key *string `json:"key,omitempty" tf:"key,omitempty"` + + // A map of keys/values to provision metadata. + // The metadata of this object + Metadata map[string]*string `json:"metadata,omitempty" tf:"metadata,omitempty"` + + // The secret key to authenitcate with. + // The S3 secret key with access to the target bucket. + SecretKey *string `json:"secretKey,omitempty" tf:"secret_key,omitempty"` + + // The path to a file that will be read and uploaded as raw bytes for the object content. The path must either be relative to the root module or absolute. + // The source file to upload. + Source *string `json:"source,omitempty" tf:"source,omitempty"` + // A unique version ID value for the object. // The version ID of this object. VersionID *string `json:"versionId,omitempty" tf:"version_id,omitempty"` + + // Specifies a target URL for website redirect. + // The website redirect location of this object. + WebsiteRedirect *string `json:"websiteRedirect,omitempty" tf:"website_redirect,omitempty"` } type ObjectParameters struct { @@ -46,8 +119,8 @@ type ObjectParameters struct { // The name of the bucket to put the object in. // The target bucket to put this object in. - // +kubebuilder:validation:Required - Bucket *string `json:"bucket" tf:"bucket,omitempty"` + // +kubebuilder:validation:Optional + Bucket *string `json:"bucket,omitempty" tf:"bucket,omitempty"` // Specifies caching behavior along the request/reply chain Read w3c cache_control for further details. // This cache_control configuration of this object. @@ -56,8 +129,8 @@ type ObjectParameters struct { // The cluster the bucket is in. // The target cluster that the bucket is in. - // +kubebuilder:validation:Required - Cluster *string `json:"cluster" tf:"cluster,omitempty"` + // +kubebuilder:validation:Optional + Cluster *string `json:"cluster,omitempty" tf:"cluster,omitempty"` // Literal string value to use as the object content, which will be uploaded as UTF-8-encoded text. // The contents of the Object to upload. @@ -101,8 +174,8 @@ type ObjectParameters struct { // They name of the object once it is in the bucket. // The name of the uploaded object. - // +kubebuilder:validation:Required - Key *string `json:"key" tf:"key,omitempty"` + // +kubebuilder:validation:Optional + Key *string `json:"key,omitempty" tf:"key,omitempty"` // A map of keys/values to provision metadata. // The metadata of this object @@ -160,8 +233,11 @@ type ObjectStatus struct { type Object struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ObjectSpec `json:"spec"` - Status ObjectStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.bucket)",message="bucket is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.cluster)",message="cluster is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.key)",message="key is a required parameter" + Spec ObjectSpec `json:"spec"` + Status ObjectStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/rdns/v1alpha1/zz_generated.deepcopy.go b/apis/rdns/v1alpha1/zz_generated.deepcopy.go index fdaf38b..723131d 100644 --- a/apis/rdns/v1alpha1/zz_generated.deepcopy.go +++ b/apis/rdns/v1alpha1/zz_generated.deepcopy.go @@ -75,11 +75,26 @@ func (in *RDNSList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RDNSObservation) DeepCopyInto(out *RDNSObservation) { *out = *in + if in.Address != nil { + in, out := &in.Address, &out.Address + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.Rdns != nil { + in, out := &in.Rdns, &out.Rdns + *out = new(string) + **out = **in + } + if in.WaitForAvailable != nil { + in, out := &in.WaitForAvailable, &out.WaitForAvailable + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RDNSObservation. diff --git a/apis/rdns/v1alpha1/zz_generated.managed.go b/apis/rdns/v1alpha1/zz_generated.managed.go index ced9a58..68cf495 100644 --- a/apis/rdns/v1alpha1/zz_generated.managed.go +++ b/apis/rdns/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *RDNS) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this RDNS. +func (mg *RDNS) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this RDNS. func (mg *RDNS) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *RDNS) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this RDNS. +func (mg *RDNS) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this RDNS. func (mg *RDNS) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/rdns/v1alpha1/zz_rdns_types.go b/apis/rdns/v1alpha1/zz_rdns_types.go index 18efce5..27ef312 100755 --- a/apis/rdns/v1alpha1/zz_rdns_types.go +++ b/apis/rdns/v1alpha1/zz_rdns_types.go @@ -14,20 +14,33 @@ import ( ) type RDNSObservation struct { + + // The Public IPv4 or IPv6 address that will receive the PTR record. A matching A or AAAA record must exist. + // The public Linode IPv4 or IPv6 address to operate on. + Address *string `json:"address,omitempty" tf:"address,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // The name of the RDNS address. + // The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set. + Rdns *string `json:"rdns,omitempty" tf:"rdns,omitempty"` + + // If true, the RDNS assignment will be retried within the operation timeout period. + // If true, the RDNS assignment will be retried within the operation timeout period. + WaitForAvailable *bool `json:"waitForAvailable,omitempty" tf:"wait_for_available,omitempty"` } type RDNSParameters struct { // The Public IPv4 or IPv6 address that will receive the PTR record. A matching A or AAAA record must exist. // The public Linode IPv4 or IPv6 address to operate on. - // +kubebuilder:validation:Required - Address *string `json:"address" tf:"address,omitempty"` + // +kubebuilder:validation:Optional + Address *string `json:"address,omitempty" tf:"address,omitempty"` // The name of the RDNS address. // The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set. - // +kubebuilder:validation:Required - Rdns *string `json:"rdns" tf:"rdns,omitempty"` + // +kubebuilder:validation:Optional + Rdns *string `json:"rdns,omitempty" tf:"rdns,omitempty"` // If true, the RDNS assignment will be retried within the operation timeout period. // If true, the RDNS assignment will be retried within the operation timeout period. @@ -59,8 +72,10 @@ type RDNSStatus struct { type RDNS struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec RDNSSpec `json:"spec"` - Status RDNSStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.address)",message="address is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.rdns)",message="rdns is a required parameter" + Spec RDNSSpec `json:"spec"` + Status RDNSStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/sshkey/v1alpha1/zz_generated.deepcopy.go b/apis/sshkey/v1alpha1/zz_generated.deepcopy.go index 9f20668..15cd78d 100644 --- a/apis/sshkey/v1alpha1/zz_generated.deepcopy.go +++ b/apis/sshkey/v1alpha1/zz_generated.deepcopy.go @@ -85,6 +85,16 @@ func (in *SSHKeyObservation) DeepCopyInto(out *SSHKeyObservation) { *out = new(string) **out = **in } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.SSHKey != nil { + in, out := &in.SSHKey, &out.SSHKey + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHKeyObservation. diff --git a/apis/sshkey/v1alpha1/zz_generated.managed.go b/apis/sshkey/v1alpha1/zz_generated.managed.go index 31d0a0f..701a084 100644 --- a/apis/sshkey/v1alpha1/zz_generated.managed.go +++ b/apis/sshkey/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *SSHKey) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this SSHKey. +func (mg *SSHKey) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this SSHKey. func (mg *SSHKey) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *SSHKey) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this SSHKey. +func (mg *SSHKey) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this SSHKey. func (mg *SSHKey) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/sshkey/v1alpha1/zz_sshkey_types.go b/apis/sshkey/v1alpha1/zz_sshkey_types.go index dd315a8..0ff058c 100755 --- a/apis/sshkey/v1alpha1/zz_sshkey_types.go +++ b/apis/sshkey/v1alpha1/zz_sshkey_types.go @@ -20,19 +20,27 @@ type SSHKeyObservation struct { Created *string `json:"created,omitempty" tf:"created,omitempty"` ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // A label for the SSH Key. + // The label of the Linode SSH Key. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The public SSH Key, which is used to authenticate to the root user of the Linodes you deploy. + // The public SSH Key, which is used to authenticate to the root user of the Linodes you deploy. + SSHKey *string `json:"sshKey,omitempty" tf:"ssh_key,omitempty"` } type SSHKeyParameters struct { // A label for the SSH Key. // The label of the Linode SSH Key. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // The public SSH Key, which is used to authenticate to the root user of the Linodes you deploy. // The public SSH Key, which is used to authenticate to the root user of the Linodes you deploy. - // +kubebuilder:validation:Required - SSHKey *string `json:"sshKey" tf:"ssh_key,omitempty"` + // +kubebuilder:validation:Optional + SSHKey *string `json:"sshKey,omitempty" tf:"ssh_key,omitempty"` } // SSHKeySpec defines the desired state of SSHKey @@ -59,8 +67,10 @@ type SSHKeyStatus struct { type SSHKey struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec SSHKeySpec `json:"spec"` - Status SSHKeyStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.sshKey)",message="sshKey is a required parameter" + Spec SSHKeySpec `json:"spec"` + Status SSHKeyStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/stackscript/v1alpha1/zz_generated.deepcopy.go b/apis/stackscript/v1alpha1/zz_generated.deepcopy.go index 5530978..1598c5c 100644 --- a/apis/stackscript/v1alpha1/zz_generated.deepcopy.go +++ b/apis/stackscript/v1alpha1/zz_generated.deepcopy.go @@ -90,16 +90,59 @@ func (in *StackscriptObservation) DeepCopyInto(out *StackscriptObservation) { *out = new(float64) **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.Images != nil { + in, out := &in.Images, &out.Images + *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.IsPublic != nil { + in, out := &in.IsPublic, &out.IsPublic + *out = new(bool) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.RevNote != nil { + in, out := &in.RevNote, &out.RevNote + *out = new(string) + **out = **in + } + if in.Script != nil { + in, out := &in.Script, &out.Script + *out = new(string) + **out = **in + } if in.Updated != nil { in, out := &in.Updated, &out.Updated *out = new(string) **out = **in } + if in.UserDefinedFields != nil { + in, out := &in.UserDefinedFields, &out.UserDefinedFields + *out = make([]UserDefinedFieldsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.UserGravatarID != nil { in, out := &in.UserGravatarID, &out.UserGravatarID *out = new(string) @@ -217,6 +260,36 @@ func (in *StackscriptStatus) DeepCopy() *StackscriptStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *UserDefinedFieldsObservation) DeepCopyInto(out *UserDefinedFieldsObservation) { *out = *in + if in.Default != nil { + in, out := &in.Default, &out.Default + *out = new(string) + **out = **in + } + if in.Example != nil { + in, out := &in.Example, &out.Example + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.ManyOf != nil { + in, out := &in.ManyOf, &out.ManyOf + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.OneOf != nil { + in, out := &in.OneOf, &out.OneOf + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserDefinedFieldsObservation. diff --git a/apis/stackscript/v1alpha1/zz_generated.managed.go b/apis/stackscript/v1alpha1/zz_generated.managed.go index 9528492..ca9df05 100644 --- a/apis/stackscript/v1alpha1/zz_generated.managed.go +++ b/apis/stackscript/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *Stackscript) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Stackscript. +func (mg *Stackscript) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Stackscript. func (mg *Stackscript) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *Stackscript) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Stackscript. +func (mg *Stackscript) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Stackscript. func (mg *Stackscript) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/stackscript/v1alpha1/zz_stackscript_types.go b/apis/stackscript/v1alpha1/zz_stackscript_types.go index e3c5da2..1589227 100755 --- a/apis/stackscript/v1alpha1/zz_stackscript_types.go +++ b/apis/stackscript/v1alpha1/zz_stackscript_types.go @@ -27,12 +27,40 @@ type StackscriptObservation struct { // The total number of times this StackScript has been deployed. DeploymentsTotal *float64 `json:"deploymentsTotal,omitempty" tf:"deployments_total,omitempty"` + // A description for the StackScript. + // A description for the StackScript. + Description *string `json:"description,omitempty" tf:"description,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + // An array of Image IDs representing the Images that this StackScript is compatible for deploying with. any/all indicates that all available image distributions, including private images, are accepted. Currently private image IDs are not supported. + // An array of Image IDs representing the Images that this StackScript is compatible for deploying with. + Images []*string `json:"images,omitempty" tf:"images,omitempty"` + + // This determines whether other users can use your StackScript. Once a StackScript is made public, it cannot be made private. Changing + // This determines whether other users can use your StackScript. Once a StackScript is made public, it cannot be made private. + IsPublic *bool `json:"isPublic,omitempty" tf:"is_public,omitempty"` + + // The StackScript's label is for display purposes only. + // The StackScript's label is for display purposes only. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // This field allows you to add notes for the set of revisions made to this StackScript. + // This field allows you to add notes for the set of revisions made to this StackScript. + RevNote *string `json:"revNote,omitempty" tf:"rev_note,omitempty"` + + // The script to execute when provisioning a new Linode with this StackScript. + // The script to execute when provisioning a new Linode with this StackScript. + Script *string `json:"script,omitempty" tf:"script,omitempty"` + // The date this StackScript was updated. // The date this StackScript was updated. Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` + // This is a list of fields defined with a special syntax inside this StackScript that allow for supplying customized parameters during deployment. + // This is a list of fields defined with a special syntax inside this StackScript that allow for supplying customized parameters during deployment. + UserDefinedFields []UserDefinedFieldsObservation `json:"userDefinedFields,omitempty" tf:"user_defined_fields,omitempty"` + // The Gravatar ID for the User who created the StackScript. // The Gravatar ID for the User who created the StackScript. UserGravatarID *string `json:"userGravatarId,omitempty" tf:"user_gravatar_id,omitempty"` @@ -46,13 +74,13 @@ type StackscriptParameters struct { // A description for the StackScript. // A description for the StackScript. - // +kubebuilder:validation:Required - Description *string `json:"description" tf:"description,omitempty"` + // +kubebuilder:validation:Optional + Description *string `json:"description,omitempty" tf:"description,omitempty"` // An array of Image IDs representing the Images that this StackScript is compatible for deploying with. any/all indicates that all available image distributions, including private images, are accepted. Currently private image IDs are not supported. // An array of Image IDs representing the Images that this StackScript is compatible for deploying with. - // +kubebuilder:validation:Required - Images []*string `json:"images" tf:"images,omitempty"` + // +kubebuilder:validation:Optional + Images []*string `json:"images,omitempty" tf:"images,omitempty"` // This determines whether other users can use your StackScript. Once a StackScript is made public, it cannot be made private. Changing // This determines whether other users can use your StackScript. Once a StackScript is made public, it cannot be made private. @@ -61,8 +89,8 @@ type StackscriptParameters struct { // The StackScript's label is for display purposes only. // The StackScript's label is for display purposes only. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // This field allows you to add notes for the set of revisions made to this StackScript. // This field allows you to add notes for the set of revisions made to this StackScript. @@ -71,8 +99,8 @@ type StackscriptParameters struct { // The script to execute when provisioning a new Linode with this StackScript. // The script to execute when provisioning a new Linode with this StackScript. - // +kubebuilder:validation:Required - Script *string `json:"script" tf:"script,omitempty"` + // +kubebuilder:validation:Optional + Script *string `json:"script,omitempty" tf:"script,omitempty"` // This is a list of fields defined with a special syntax inside this StackScript that allow for supplying customized parameters during deployment. // This is a list of fields defined with a special syntax inside this StackScript that allow for supplying customized parameters during deployment. @@ -81,6 +109,24 @@ type StackscriptParameters struct { } type UserDefinedFieldsObservation struct { + + // The default value. If not specified, this value will be used. + Default *string `json:"default,omitempty" tf:"default,omitempty"` + + // An example value for the field. + Example *string `json:"example,omitempty" tf:"example,omitempty"` + + // The StackScript's label is for display purposes only. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // A list of acceptable values for the field in any quantity, combination or order. + ManyOf *string `json:"manyOf,omitempty" tf:"many_of,omitempty"` + + // The name of the field. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // A list of acceptable single values for the field. + OneOf *string `json:"oneOf,omitempty" tf:"one_of,omitempty"` } type UserDefinedFieldsParameters struct { @@ -134,8 +180,12 @@ type StackscriptStatus struct { type Stackscript struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec StackscriptSpec `json:"spec"` - Status StackscriptStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.description)",message="description is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.images)",message="images is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.script)",message="script is a required parameter" + Spec StackscriptSpec `json:"spec"` + Status StackscriptStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/token/v1alpha1/zz_generated.deepcopy.go b/apis/token/v1alpha1/zz_generated.deepcopy.go index e1ac9df..b925ab3 100644 --- a/apis/token/v1alpha1/zz_generated.deepcopy.go +++ b/apis/token/v1alpha1/zz_generated.deepcopy.go @@ -80,11 +80,26 @@ func (in *TokenObservation) DeepCopyInto(out *TokenObservation) { *out = new(string) **out = **in } + if in.Expiry != nil { + in, out := &in.Expiry, &out.Expiry + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TokenObservation. diff --git a/apis/token/v1alpha1/zz_generated.managed.go b/apis/token/v1alpha1/zz_generated.managed.go index 7b1be4e..de97a8f 100644 --- a/apis/token/v1alpha1/zz_generated.managed.go +++ b/apis/token/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *Token) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Token. +func (mg *Token) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Token. func (mg *Token) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *Token) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Token. +func (mg *Token) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Token. func (mg *Token) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/token/v1alpha1/zz_token_types.go b/apis/token/v1alpha1/zz_token_types.go index 8b3eab3..f1147d2 100755 --- a/apis/token/v1alpha1/zz_token_types.go +++ b/apis/token/v1alpha1/zz_token_types.go @@ -19,13 +19,25 @@ type TokenObservation struct { // The date and time this token was created. Created *string `json:"created,omitempty" tf:"created,omitempty"` + // When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. Tokens may be created with 'null' as their expiry and will never expire unless revoked. + // When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. Tokens may be created with 'null' as their expiry and will never expire unless revoked. Format: 2006-01-02T15:04:05Z07:00 + Expiry *string `json:"expiry,omitempty" tf:"expiry,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // A label for the Token. + // The label of the Linode Token. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The scopes this token was created with. These define what parts of the Account the token can be used to access. Many command-line tools, such as the Linode CLI, require tokens with access to *. Tokens with more restrictive scopes are generally more secure. All scopes can be viewed in the Linode API documentation. + // The scopes this token was created with. These define what parts of the Account the token can be used to access. Many command-line tools, such as the Linode CLI, require tokens with access to *. Tokens with more restrictive scopes are generally more secure. Multiple scopes are separated by a space character (e.g., "databases:read_only events:read_only"). You can find the list of available scopes on Linode API docs site, https://www.linode.com/docs/api#oauth-reference + Scopes *string `json:"scopes,omitempty" tf:"scopes,omitempty"` } type TokenParameters struct { // When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. Tokens may be created with 'null' as their expiry and will never expire unless revoked. - // When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. Tokens may be created with 'null' as their expiry and will never expire unless revoked. + // When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. Tokens may be created with 'null' as their expiry and will never expire unless revoked. Format: 2006-01-02T15:04:05Z07:00 // +kubebuilder:validation:Optional Expiry *string `json:"expiry,omitempty" tf:"expiry,omitempty"` @@ -35,9 +47,9 @@ type TokenParameters struct { Label *string `json:"label,omitempty" tf:"label,omitempty"` // The scopes this token was created with. These define what parts of the Account the token can be used to access. Many command-line tools, such as the Linode CLI, require tokens with access to *. Tokens with more restrictive scopes are generally more secure. All scopes can be viewed in the Linode API documentation. - // The scopes this token was created with. These define what parts of the Account the token can be used to access. Many command-line tools, such as the Linode CLI, require tokens with access to *. Tokens with more restrictive scopes are generally more secure. - // +kubebuilder:validation:Required - Scopes *string `json:"scopes" tf:"scopes,omitempty"` + // The scopes this token was created with. These define what parts of the Account the token can be used to access. Many command-line tools, such as the Linode CLI, require tokens with access to *. Tokens with more restrictive scopes are generally more secure. Multiple scopes are separated by a space character (e.g., "databases:read_only events:read_only"). You can find the list of available scopes on Linode API docs site, https://www.linode.com/docs/api#oauth-reference + // +kubebuilder:validation:Optional + Scopes *string `json:"scopes,omitempty" tf:"scopes,omitempty"` } // TokenSpec defines the desired state of Token @@ -64,8 +76,9 @@ type TokenStatus struct { type Token struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec TokenSpec `json:"spec"` - Status TokenStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.scopes)",message="scopes is a required parameter" + Spec TokenSpec `json:"spec"` + Status TokenStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/user/v1alpha1/zz_generated.deepcopy.go b/apis/user/v1alpha1/zz_generated.deepcopy.go index 9b67bcd..91e120e 100644 --- a/apis/user/v1alpha1/zz_generated.deepcopy.go +++ b/apis/user/v1alpha1/zz_generated.deepcopy.go @@ -16,6 +16,16 @@ import ( // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DomainGrantObservation) DeepCopyInto(out *DomainGrantObservation) { *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Permissions != nil { + in, out := &in.Permissions, &out.Permissions + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DomainGrantObservation. @@ -56,6 +66,16 @@ func (in *DomainGrantParameters) DeepCopy() *DomainGrantParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *FirewallGrantObservation) DeepCopyInto(out *FirewallGrantObservation) { *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Permissions != nil { + in, out := &in.Permissions, &out.Permissions + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallGrantObservation. @@ -96,6 +116,66 @@ func (in *FirewallGrantParameters) DeepCopy() *FirewallGrantParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *GlobalGrantsObservation) DeepCopyInto(out *GlobalGrantsObservation) { *out = *in + if in.AccountAccess != nil { + in, out := &in.AccountAccess, &out.AccountAccess + *out = new(string) + **out = **in + } + if in.AddDatabases != nil { + in, out := &in.AddDatabases, &out.AddDatabases + *out = new(bool) + **out = **in + } + if in.AddDomains != nil { + in, out := &in.AddDomains, &out.AddDomains + *out = new(bool) + **out = **in + } + if in.AddFirewalls != nil { + in, out := &in.AddFirewalls, &out.AddFirewalls + *out = new(bool) + **out = **in + } + if in.AddImages != nil { + in, out := &in.AddImages, &out.AddImages + *out = new(bool) + **out = **in + } + if in.AddLinodes != nil { + in, out := &in.AddLinodes, &out.AddLinodes + *out = new(bool) + **out = **in + } + if in.AddLongview != nil { + in, out := &in.AddLongview, &out.AddLongview + *out = new(bool) + **out = **in + } + if in.AddNodebalancers != nil { + in, out := &in.AddNodebalancers, &out.AddNodebalancers + *out = new(bool) + **out = **in + } + if in.AddStackscripts != nil { + in, out := &in.AddStackscripts, &out.AddStackscripts + *out = new(bool) + **out = **in + } + if in.AddVolumes != nil { + in, out := &in.AddVolumes, &out.AddVolumes + *out = new(bool) + **out = **in + } + if in.CancelAccount != nil { + in, out := &in.CancelAccount, &out.CancelAccount + *out = new(bool) + **out = **in + } + if in.LongviewSubscription != nil { + in, out := &in.LongviewSubscription, &out.LongviewSubscription + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GlobalGrantsObservation. @@ -186,6 +266,16 @@ func (in *GlobalGrantsParameters) DeepCopy() *GlobalGrantsParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ImageGrantObservation) DeepCopyInto(out *ImageGrantObservation) { *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Permissions != nil { + in, out := &in.Permissions, &out.Permissions + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageGrantObservation. @@ -226,6 +316,16 @@ func (in *ImageGrantParameters) DeepCopy() *ImageGrantParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LinodeGrantObservation) DeepCopyInto(out *LinodeGrantObservation) { *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Permissions != nil { + in, out := &in.Permissions, &out.Permissions + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LinodeGrantObservation. @@ -266,6 +366,16 @@ func (in *LinodeGrantParameters) DeepCopy() *LinodeGrantParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LongviewGrantObservation) DeepCopyInto(out *LongviewGrantObservation) { *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Permissions != nil { + in, out := &in.Permissions, &out.Permissions + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LongviewGrantObservation. @@ -306,6 +416,16 @@ func (in *LongviewGrantParameters) DeepCopy() *LongviewGrantParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NodebalancerGrantObservation) DeepCopyInto(out *NodebalancerGrantObservation) { *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Permissions != nil { + in, out := &in.Permissions, &out.Permissions + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodebalancerGrantObservation. @@ -346,6 +466,16 @@ func (in *NodebalancerGrantParameters) DeepCopy() *NodebalancerGrantParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StackscriptGrantObservation) DeepCopyInto(out *StackscriptGrantObservation) { *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Permissions != nil { + in, out := &in.Permissions, &out.Permissions + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StackscriptGrantObservation. @@ -445,11 +575,70 @@ func (in *UserList) DeepCopyObject() runtime.Object { // 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.DomainGrant != nil { + in, out := &in.DomainGrant, &out.DomainGrant + *out = make([]DomainGrantObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Email != nil { + in, out := &in.Email, &out.Email + *out = new(string) + **out = **in + } + if in.FirewallGrant != nil { + in, out := &in.FirewallGrant, &out.FirewallGrant + *out = make([]FirewallGrantObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.GlobalGrants != nil { + in, out := &in.GlobalGrants, &out.GlobalGrants + *out = make([]GlobalGrantsObservation, 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.ImageGrant != nil { + in, out := &in.ImageGrant, &out.ImageGrant + *out = make([]ImageGrantObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LinodeGrant != nil { + in, out := &in.LinodeGrant, &out.LinodeGrant + *out = make([]LinodeGrantObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LongviewGrant != nil { + in, out := &in.LongviewGrant, &out.LongviewGrant + *out = make([]LongviewGrantObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.NodebalancerGrant != nil { + in, out := &in.NodebalancerGrant, &out.NodebalancerGrant + *out = make([]NodebalancerGrantObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Restricted != nil { + in, out := &in.Restricted, &out.Restricted + *out = new(bool) + **out = **in + } if in.SSHKeys != nil { in, out := &in.SSHKeys, &out.SSHKeys *out = make([]*string, len(*in)) @@ -461,11 +650,30 @@ func (in *UserObservation) DeepCopyInto(out *UserObservation) { } } } + if in.StackscriptGrant != nil { + in, out := &in.StackscriptGrant, &out.StackscriptGrant + *out = make([]StackscriptGrantObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.TfaEnabled != nil { in, out := &in.TfaEnabled, &out.TfaEnabled *out = new(bool) **out = **in } + if in.Username != nil { + in, out := &in.Username, &out.Username + *out = new(string) + **out = **in + } + if in.VolumeGrant != nil { + in, out := &in.VolumeGrant, &out.VolumeGrant + *out = make([]VolumeGrantObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserObservation. @@ -608,6 +816,16 @@ func (in *UserStatus) DeepCopy() *UserStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VolumeGrantObservation) DeepCopyInto(out *VolumeGrantObservation) { *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Permissions != nil { + in, out := &in.Permissions, &out.Permissions + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeGrantObservation. diff --git a/apis/user/v1alpha1/zz_generated.managed.go b/apis/user/v1alpha1/zz_generated.managed.go index e9c279e..d8ea094 100644 --- a/apis/user/v1alpha1/zz_generated.managed.go +++ b/apis/user/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *User) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this User. +func (mg *User) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this User. func (mg *User) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *User) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this User. +func (mg *User) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this User. func (mg *User) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/user/v1alpha1/zz_user_types.go b/apis/user/v1alpha1/zz_user_types.go index cc87006..4b13d25 100755 --- a/apis/user/v1alpha1/zz_user_types.go +++ b/apis/user/v1alpha1/zz_user_types.go @@ -14,6 +14,14 @@ import ( ) type DomainGrantObservation struct { + + // The ID of the entity this grant applies to. + // The ID of the entity this grant applies to. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // The level of access this User has to this entity. (read_only, read_write) + // The level of access this User has to this entity. If null, this User has no access. + Permissions *string `json:"permissions,omitempty" tf:"permissions,omitempty"` } type DomainGrantParameters struct { @@ -30,6 +38,14 @@ type DomainGrantParameters struct { } type FirewallGrantObservation struct { + + // The ID of the entity this grant applies to. + // The ID of the entity this grant applies to. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // The level of access this User has to this entity. (read_only, read_write) + // The level of access this User has to this entity. If null, this User has no access. + Permissions *string `json:"permissions,omitempty" tf:"permissions,omitempty"` } type FirewallGrantParameters struct { @@ -46,6 +62,52 @@ type FirewallGrantParameters struct { } type GlobalGrantsObservation struct { + + // The level of access this User has to Account-level actions, like billing information. A restricted User will never be able to manage users. + AccountAccess *string `json:"accountAccess,omitempty" tf:"account_access,omitempty"` + + // If true, this User may add Databases. + // If true, this User may add Databases. + AddDatabases *bool `json:"addDatabases,omitempty" tf:"add_databases,omitempty"` + + // If true, this User may add Domains. + // If true, this User may add Domains. + AddDomains *bool `json:"addDomains,omitempty" tf:"add_domains,omitempty"` + + // If true, this User may add Firewalls. + // If true, this User may add Firewalls. + AddFirewalls *bool `json:"addFirewalls,omitempty" tf:"add_firewalls,omitempty"` + + // If true, this User may add Images. + // If true, this User may add Images. + AddImages *bool `json:"addImages,omitempty" tf:"add_images,omitempty"` + + // If true, this User may create Linodes. + // If true, this User may create Linodes. + AddLinodes *bool `json:"addLinodes,omitempty" tf:"add_linodes,omitempty"` + + // If true, this User may create Longview clients and view the current plan. + // If true, this User may create Longview clients and view the current plan. + AddLongview *bool `json:"addLongview,omitempty" tf:"add_longview,omitempty"` + + // If true, this User may add NodeBalancers. + // If true, this User may add NodeBalancers. + AddNodebalancers *bool `json:"addNodebalancers,omitempty" tf:"add_nodebalancers,omitempty"` + + // If true, this User may add StackScripts. + // If true, this User may add StackScripts. + AddStackscripts *bool `json:"addStackscripts,omitempty" tf:"add_stackscripts,omitempty"` + + // If true, this User may add Volumes. + AddVolumes *bool `json:"addVolumes,omitempty" tf:"add_volumes,omitempty"` + + // If true, this User may cancel the entire Account. + // If true, this User may cancel the entire Account. + CancelAccount *bool `json:"cancelAccount,omitempty" tf:"cancel_account,omitempty"` + + // If true, this User may manage the Account’s Longview subscription. + // If true, this User may manage the Account’s Longview subscription. + LongviewSubscription *bool `json:"longviewSubscription,omitempty" tf:"longview_subscription,omitempty"` } type GlobalGrantsParameters struct { @@ -110,6 +172,14 @@ type GlobalGrantsParameters struct { } type ImageGrantObservation struct { + + // The ID of the entity this grant applies to. + // The ID of the entity this grant applies to. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // The level of access this User has to this entity. (read_only, read_write) + // The level of access this User has to this entity. If null, this User has no access. + Permissions *string `json:"permissions,omitempty" tf:"permissions,omitempty"` } type ImageGrantParameters struct { @@ -126,6 +196,14 @@ type ImageGrantParameters struct { } type LinodeGrantObservation struct { + + // The ID of the entity this grant applies to. + // The ID of the entity this grant applies to. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // The level of access this User has to this entity. (read_only, read_write) + // The level of access this User has to this entity. If null, this User has no access. + Permissions *string `json:"permissions,omitempty" tf:"permissions,omitempty"` } type LinodeGrantParameters struct { @@ -142,6 +220,14 @@ type LinodeGrantParameters struct { } type LongviewGrantObservation struct { + + // The ID of the entity this grant applies to. + // The ID of the entity this grant applies to. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // The level of access this User has to this entity. (read_only, read_write) + // The level of access this User has to this entity. If null, this User has no access. + Permissions *string `json:"permissions,omitempty" tf:"permissions,omitempty"` } type LongviewGrantParameters struct { @@ -158,6 +244,14 @@ type LongviewGrantParameters struct { } type NodebalancerGrantObservation struct { + + // The ID of the entity this grant applies to. + // The ID of the entity this grant applies to. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // The level of access this User has to this entity. (read_only, read_write) + // The level of access this User has to this entity. If null, this User has no access. + Permissions *string `json:"permissions,omitempty" tf:"permissions,omitempty"` } type NodebalancerGrantParameters struct { @@ -174,6 +268,14 @@ type NodebalancerGrantParameters struct { } type StackscriptGrantObservation struct { + + // The ID of the entity this grant applies to. + // The ID of the entity this grant applies to. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // The level of access this User has to this entity. (read_only, read_write) + // The level of access this User has to this entity. If null, this User has no access. + Permissions *string `json:"permissions,omitempty" tf:"permissions,omitempty"` } type StackscriptGrantParameters struct { @@ -191,16 +293,63 @@ type StackscriptGrantParameters struct { type UserObservation struct { + // The domains the user has permissions access to. + // A set containing all of the user's active grants. + DomainGrant []DomainGrantObservation `json:"domainGrant,omitempty" tf:"domain_grant,omitempty"` + + // The email address of the user. + // The email of the user. + Email *string `json:"email,omitempty" tf:"email,omitempty"` + + // The firewalls the user has permissions access to. + // A set containing all of the user's active grants. + FirewallGrant []FirewallGrantObservation `json:"firewallGrant,omitempty" tf:"firewall_grant,omitempty"` + + // A structure containing the Account-level grants a User has. + GlobalGrants []GlobalGrantsObservation `json:"globalGrants,omitempty" tf:"global_grants,omitempty"` + // The ID of the entity this grant applies to. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // The images the user has permissions access to. + // A set containing all of the user's active grants. + ImageGrant []ImageGrantObservation `json:"imageGrant,omitempty" tf:"image_grant,omitempty"` + + // The Linodes the user has permissions access to. + // A set containing all of the user's active grants. + LinodeGrant []LinodeGrantObservation `json:"linodeGrant,omitempty" tf:"linode_grant,omitempty"` + + // The longview the user has permissions access to. + // A set containing all of the user's active grants. + LongviewGrant []LongviewGrantObservation `json:"longviewGrant,omitempty" tf:"longview_grant,omitempty"` + + // The NodeBalancers the user has permissions access to. + // A set containing all of the user's active grants. + NodebalancerGrant []NodebalancerGrantObservation `json:"nodebalancerGrant,omitempty" tf:"nodebalancer_grant,omitempty"` + + // If true, this user will only have explicit permissions granted. + // If true, the user must be explicitly granted access to platform actions and entities. + Restricted *bool `json:"restricted,omitempty" tf:"restricted,omitempty"` + // A list of the User's SSH keys. // SSH keys to add to the user profile. SSHKeys []*string `json:"sshKeys,omitempty" tf:"ssh_keys,omitempty"` + // The StackScripts the user has permissions access to. + // A set containing all of the user's active grants. + StackscriptGrant []StackscriptGrantObservation `json:"stackscriptGrant,omitempty" tf:"stackscript_grant,omitempty"` + // Whether the user has two-factor-authentication enabled. // If the User has Two Factor Authentication (TFA) enabled. TfaEnabled *bool `json:"tfaEnabled,omitempty" tf:"tfa_enabled,omitempty"` + + // The username of the user. + // The username of the user. + Username *string `json:"username,omitempty" tf:"username,omitempty"` + + // The volumes the user has permissions access to. + // A set containing all of the user's active grants. + VolumeGrant []VolumeGrantObservation `json:"volumeGrant,omitempty" tf:"volume_grant,omitempty"` } type UserParameters struct { @@ -212,8 +361,8 @@ type UserParameters struct { // The email address of the user. // The email of the user. - // +kubebuilder:validation:Required - Email *string `json:"email" tf:"email,omitempty"` + // +kubebuilder:validation:Optional + Email *string `json:"email,omitempty" tf:"email,omitempty"` // The firewalls the user has permissions access to. // A set containing all of the user's active grants. @@ -256,8 +405,8 @@ type UserParameters struct { // The username of the user. // The username of the user. - // +kubebuilder:validation:Required - Username *string `json:"username" tf:"username,omitempty"` + // +kubebuilder:validation:Optional + Username *string `json:"username,omitempty" tf:"username,omitempty"` // The volumes the user has permissions access to. // A set containing all of the user's active grants. @@ -266,6 +415,14 @@ type UserParameters struct { } type VolumeGrantObservation struct { + + // The ID of the entity this grant applies to. + // The ID of the entity this grant applies to. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // The level of access this User has to this entity. (read_only, read_write) + // The level of access this User has to this entity. If null, this User has no access. + Permissions *string `json:"permissions,omitempty" tf:"permissions,omitempty"` } type VolumeGrantParameters struct { @@ -305,8 +462,10 @@ type UserStatus struct { type User struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec UserSpec `json:"spec"` - Status UserStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.email)",message="email is a required parameter" + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.username)",message="username is a required parameter" + Spec UserSpec `json:"spec"` + Status UserStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/volume/v1alpha1/zz_generated.deepcopy.go b/apis/volume/v1alpha1/zz_generated.deepcopy.go index ff4e6b2..d8a8ae8 100644 --- a/apis/volume/v1alpha1/zz_generated.deepcopy.go +++ b/apis/volume/v1alpha1/zz_generated.deepcopy.go @@ -86,11 +86,47 @@ func (in *VolumeObservation) DeepCopyInto(out *VolumeObservation) { *out = new(string) **out = **in } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.LinodeID != nil { + in, out := &in.LinodeID, &out.LinodeID + *out = new(float64) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.SourceVolumeID != nil { + in, out := &in.SourceVolumeID, &out.SourceVolumeID + *out = new(float64) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) **out = **in } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *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 VolumeObservation. diff --git a/apis/volume/v1alpha1/zz_generated.managed.go b/apis/volume/v1alpha1/zz_generated.managed.go index 8634e45..1e4e831 100644 --- a/apis/volume/v1alpha1/zz_generated.managed.go +++ b/apis/volume/v1alpha1/zz_generated.managed.go @@ -17,6 +17,11 @@ func (mg *Volume) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicy of this Volume. +func (mg *Volume) GetManagementPolicy() xpv1.ManagementPolicy { + return mg.Spec.ManagementPolicy +} + // GetProviderConfigReference of this Volume. func (mg *Volume) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference @@ -50,6 +55,11 @@ func (mg *Volume) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicy of this Volume. +func (mg *Volume) SetManagementPolicy(r xpv1.ManagementPolicy) { + mg.Spec.ManagementPolicy = r +} + // SetProviderConfigReference of this Volume. func (mg *Volume) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r diff --git a/apis/volume/v1alpha1/zz_volume_types.go b/apis/volume/v1alpha1/zz_volume_types.go index 10292f2..e3bc822 100755 --- a/apis/volume/v1alpha1/zz_volume_types.go +++ b/apis/volume/v1alpha1/zz_volume_types.go @@ -21,17 +21,41 @@ type VolumeObservation struct { ID *string `json:"id,omitempty" tf:"id,omitempty"` + // The label of the Linode Volume + // The label of the Linode Volume. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The ID of a Linode Instance where the Volume should be attached. + // The Linode ID where the Volume should be attached. + LinodeID *float64 `json:"linodeId,omitempty" tf:"linode_id,omitempty"` + + // The region where this volume will be deployed. Examples are "us-east", "us-west", "ap-south", etc. See all regions here. This field is optional for cloned volumes. Changing . + // The region where this volume will be deployed. + Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // Size of the Volume in GB. + // Size of the Volume in GB + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // The ID of a Linode Volume to clone. NOTE: Cloned volumes must be in the same region as the source volume. + // The ID of a volume to clone. + SourceVolumeID *float64 `json:"sourceVolumeId,omitempty" tf:"source_volume_id,omitempty"` + // The status of the Linode Volume. (creating, active, resizing, contact_support) // The status of the volume, indicating the current readiness state. Status *string `json:"status,omitempty" tf:"status,omitempty"` + + // A list of tags applied to this object. Tags are for organizational purposes only. + // An array of tags applied to this object. Tags are for organizational purposes only. + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` } type VolumeParameters struct { // The label of the Linode Volume // The label of the Linode Volume. - // +kubebuilder:validation:Required - Label *string `json:"label" tf:"label,omitempty"` + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` // The ID of a Linode Instance where the Volume should be attached. // The Linode ID where the Volume should be attached. @@ -92,8 +116,9 @@ type VolumeStatus struct { type Volume struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec VolumeSpec `json:"spec"` - Status VolumeStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label)",message="label is a required parameter" + Spec VolumeSpec `json:"spec"` + Status VolumeStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/config/provider-metadata.yaml b/config/provider-metadata.yaml index cf0b634..4bbd93b 100644 --- a/config/provider-metadata.yaml +++ b/config/provider-metadata.yaml @@ -1,5 +1,24 @@ name: linode/linode resources: + linode_account_settings: + subCategory: "" + description: Manages the settings of a Linode account. + name: linode_account_settings + title: linode_account_settings + examples: + - name: myaccount + manifest: |- + { + "backups_enabled": "true", + "longview_subscription": "longview-40" + } + argumentDocs: + backups_enabled: '- (Optional) The account-wide backups default. If true, all Linodes created will automatically be enrolled in the Backups service. If false, Linodes will not be enrolled by default, but may still be enrolled on creation or later.' + longview_subscription: '- (Optional) The Longview Pro tier you are currently subscribed to. The value must be a Longview Subscription ID or null for Longview Free.' + managed: '- Enables monitoring for connectivity, response, and total request time.' + network_helper: '- (Optional) Enables network helper across all users by default for new Linodes and Linode Configs.' + object_storage: '- A string describing the status of this account’s Object Storage service enrollment.' + importStatements: [] linode_database_access_controls: subCategory: "" description: Manages the access controls for a Linode Database. diff --git a/config/schema.json b/config/schema.json index 067f8a8..336afb3 100644 --- a/config/schema.json +++ b/config/schema.json @@ -1 +1 @@ -{"format_version":"1.0","provider_schemas":{"registry.terraform.io/linode/linode":{"provider":{"version":0,"block":{"attributes":{"api_version":{"type":"string","description":"An HTTP User-Agent Prefix to prepend in API requests.","description_kind":"plain","optional":true},"config_path":{"type":"string","description_kind":"plain","optional":true},"config_profile":{"type":"string","description_kind":"plain","optional":true},"disable_internal_cache":{"type":"bool","description":"Disable the internal caching system that backs certain Linode API requests.","description_kind":"plain","optional":true},"event_poll_ms":{"type":"number","description":"The rate in milliseconds to poll for events.","description_kind":"plain","optional":true},"lke_event_poll_ms":{"type":"number","description":"The rate in milliseconds to poll for LKE events.","description_kind":"plain","optional":true},"lke_node_ready_poll_ms":{"type":"number","description":"The rate in milliseconds to poll for an LKE node to be ready.","description_kind":"plain","optional":true},"max_retry_delay_ms":{"type":"number","description":"Maximum delay in milliseconds before retrying a request.","description_kind":"plain","optional":true},"min_retry_delay_ms":{"type":"number","description":"Minimum delay in milliseconds before retrying a request.","description_kind":"plain","optional":true},"skip_instance_delete_poll":{"type":"bool","description":"Skip waiting for a linode_instance resource to finish deleting.","description_kind":"plain","optional":true},"skip_instance_ready_poll":{"type":"bool","description":"Skip waiting for a linode_instance resource to be running.","description_kind":"plain","optional":true},"token":{"type":"string","description":"The token that allows you access to your Linode account","description_kind":"plain","optional":true},"ua_prefix":{"type":"string","description":"An HTTP User-Agent Prefix to prepend in API requests.","description_kind":"plain","optional":true},"url":{"type":"string","description":"The HTTP(S) API address of the Linode API to use.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"resource_schemas":{"linode_database_access_controls":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","required":true},"database_id":{"type":"number","description":"The ID of the database to manage the allow list for.","description_kind":"plain","required":true},"database_type":{"type":"string","description":"The type of the database to manage the allow list for.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"linode_database_mongodb":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","optional":true,"computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","optional":true},"compression_type":{"type":"string","description":"The type of data compression for this Database.","description_kind":"plain","optional":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","optional":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. mongodb/4.4.10)","description_kind":"plain","required":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","required":true},"peers":{"type":["set","string"],"description":"A set of peer addresses for this Database.","description_kind":"plain","computed":true},"port":{"type":"number","description":"The access port for this Managed Database.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","required":true},"replica_set":{"type":"string","description":"Label for configuring a MongoDB replica set. Choose the same label on multiple Databases to include them in the same replica set.","description_kind":"plain","computed":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","optional":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"storage_engine":{"type":"string","description":"The type of storage engine for this Database.","description_kind":"plain","optional":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","required":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","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"}},"updates":{"nesting_mode":"list","block":{"attributes":{"day_of_week":{"type":"string","description":"The day to perform maintenance.","description_kind":"plain","required":true},"duration":{"type":"number","description":"The maximum maintenance window time in hours.","description_kind":"plain","required":true},"frequency":{"type":"string","description":"Whether maintenance occurs on a weekly or monthly basis.","description_kind":"plain","required":true},"hour_of_day":{"type":"number","description":"The hour to begin maintenance based in UTC time.","description_kind":"plain","required":true},"week_of_month":{"type":"number","description":"The week of the month to perform monthly frequency updates. Required for monthly frequency updates.","description_kind":"plain","optional":true}},"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"linode_database_mysql":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","optional":true,"computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","optional":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","optional":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. mysql/8.0.26)","description_kind":"plain","required":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","required":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","required":true},"replication_type":{"type":"string","description":"The replication method used for the Managed Database.","description_kind":"plain","optional":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","optional":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","required":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","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"}},"updates":{"nesting_mode":"list","block":{"attributes":{"day_of_week":{"type":"string","description":"The day to perform maintenance.","description_kind":"plain","required":true},"duration":{"type":"number","description":"The maximum maintenance window time in hours.","description_kind":"plain","required":true},"frequency":{"type":"string","description":"Whether maintenance occurs on a weekly or monthly basis.","description_kind":"plain","required":true},"hour_of_day":{"type":"number","description":"The hour to begin maintenance based in UTC time.","description_kind":"plain","required":true},"week_of_month":{"type":"number","description":"The week of the month to perform monthly frequency updates. Required for monthly frequency updates.","description_kind":"plain","optional":true}},"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"linode_database_postgresql":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","optional":true,"computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","optional":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","optional":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. mongodb/4.4.10)","description_kind":"plain","required":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","required":true},"port":{"type":"number","description":"The access port for this Managed Database.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","required":true},"replication_commit_type":{"type":"string","description":"The synchronization level of the replicating server.Must be `local` or `off` for the `asynch` replication type. Must be `on`, `remote_write`, or `remote_apply` for the `semi_synch` replication type.","description_kind":"plain","optional":true},"replication_type":{"type":"string","description":"The replication method used for the Managed Database. Must be `none` for a single node cluster. Must be `asynch` or `semi_synch` for a high availability cluster.","description_kind":"plain","optional":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","optional":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","required":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","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"}},"updates":{"nesting_mode":"list","block":{"attributes":{"day_of_week":{"type":"string","description":"The day to perform maintenance.","description_kind":"plain","required":true},"duration":{"type":"number","description":"The maximum maintenance window time in hours.","description_kind":"plain","required":true},"frequency":{"type":"string","description":"Whether maintenance occurs on a weekly or monthly basis.","description_kind":"plain","required":true},"hour_of_day":{"type":"number","description":"The hour to begin maintenance based in UTC time.","description_kind":"plain","required":true},"week_of_month":{"type":"number","description":"The week of the month to perform monthly frequency updates. Required for monthly frequency updates.","description_kind":"plain","optional":true}},"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"linode_domain":{"version":0,"block":{"attributes":{"axfr_ips":{"type":["set","string"],"description":"The list of IPs that may perform a zone transfer for this Domain. This is potentially dangerous, and should be set to an empty list unless you intend to use it.","description_kind":"plain","optional":true},"description":{"type":"string","description":"A description for this Domain. This is for display purposes only.","description_kind":"plain","optional":true},"domain":{"type":"string","description":"The domain this Domain represents. These must be unique in our system; you cannot have two Domains representing the same domain.","description_kind":"plain","required":true},"expire_sec":{"type":"number","description":"The amount of time in seconds that may pass before this Domain is no longer Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","optional":true},"group":{"type":"string","description":"The group this Domain belongs to. This is for display purposes only.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"master_ips":{"type":["set","string"],"description":"The IP addresses representing the master DNS for this Domain.","description_kind":"plain","optional":true},"refresh_sec":{"type":"number","description":"The amount of time in seconds before this Domain should be refreshed. Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","optional":true},"retry_sec":{"type":"number","description":"The interval, in seconds, at which a failed refresh should be retried. Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","optional":true},"soa_email":{"type":"string","description":"Start of Authority email address. This is required for master Domains.","description_kind":"plain","optional":true},"status":{"type":"string","description":"Used to control whether this Domain is currently being rendered.","description_kind":"plain","optional":true,"computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","optional":true},"ttl_sec":{"type":"number","description":"'Time to Live' - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","optional":true},"type":{"type":"string","description":"If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave).","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_domain_record":{"version":0,"block":{"attributes":{"domain_id":{"type":"number","description":"The ID of the Domain to access.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of this Record. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the subdomain being associated with an IP address. Generated for SRV records.","description_kind":"plain","optional":true,"computed":true},"port":{"type":"number","description":"The port this Record points to.","description_kind":"plain","optional":true},"priority":{"type":"number","description":"The priority of the target host. Lower values are preferred.","description_kind":"plain","optional":true},"protocol":{"type":"string","description":"The protocol this Record's service communicates with. Only valid for SRV records.","description_kind":"plain","optional":true},"record_type":{"type":"string","description":"The type of Record this is in the DNS system. For example, A records associate a domain name with an IPv4 address, and AAAA records associate a domain name with an IPv6 address.","description_kind":"plain","required":true},"service":{"type":"string","description":"The service this Record identified. Only valid for SRV records.","description_kind":"plain","optional":true},"tag":{"type":"string","description":"The tag portion of a CAA record. It is invalid to set this on other record types.","description_kind":"plain","optional":true},"target":{"type":"string","description":"The target for this Record. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the address the named Domain should resolve to.","description_kind":"plain","required":true},"ttl_sec":{"type":"number","description":"'Time to Live' - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","optional":true},"weight":{"type":"number","description":"The relative weight of this Record. Higher values are preferred.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"linode_firewall":{"version":0,"block":{"attributes":{"devices":{"type":["list",["object",{"entity_id":"number","id":"number","label":"string","type":"string","url":"string"}]],"description":"The devices associated with this firewall.","description_kind":"plain","computed":true},"disabled":{"type":"bool","description":"If true, the Firewall is inactive.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"inbound_policy":{"type":"string","description":"The default behavior for inbound traffic. This setting can be overridden by updating the inbound.action property for an individual Firewall Rule.","description_kind":"plain","required":true},"label":{"type":"string","description":"The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.","description_kind":"plain","required":true},"linodes":{"type":["set","number"],"description":"The IDs of Linodes to apply this firewall to.","description_kind":"plain","optional":true,"computed":true},"outbound_policy":{"type":"string","description":"The default behavior for outbound traffic. This setting can be overridden by updating the outbound.action property for an individual Firewall Rule.","description_kind":"plain","required":true},"status":{"type":"string","description":"The status of the firewall.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","optional":true}},"block_types":{"inbound":{"nesting_mode":"list","block":{"attributes":{"action":{"type":"string","description":"Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.","description_kind":"plain","required":true},"ipv4":{"type":["list","string"],"description":"A list of IP addresses, CIDR blocks, or 0.0.0.0/0 (to allow all) this rule applies to.","description_kind":"plain","optional":true},"ipv6":{"type":["list","string"],"description":"A list of IPv6 addresses or networks this rule applies to.","description_kind":"plain","optional":true},"label":{"type":"string","description":"Used to identify this rule. For display purposes only.","description_kind":"plain","required":true},"ports":{"type":"string","description":"A string representation of ports and/or port ranges (i.e. \"443\" or \"80-90, 91\").","description_kind":"plain","optional":true},"protocol":{"type":"string","description":"The network protocol this rule controls.","description_kind":"plain","required":true}},"description":"A firewall rule that specifies what inbound network traffic is allowed.","description_kind":"plain"}},"outbound":{"nesting_mode":"list","block":{"attributes":{"action":{"type":"string","description":"Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.","description_kind":"plain","required":true},"ipv4":{"type":["list","string"],"description":"A list of IP addresses, CIDR blocks, or 0.0.0.0/0 (to allow all) this rule applies to.","description_kind":"plain","optional":true},"ipv6":{"type":["list","string"],"description":"A list of IPv6 addresses or networks this rule applies to.","description_kind":"plain","optional":true},"label":{"type":"string","description":"Used to identify this rule. For display purposes only.","description_kind":"plain","required":true},"ports":{"type":"string","description":"A string representation of ports and/or port ranges (i.e. \"443\" or \"80-90, 91\").","description_kind":"plain","optional":true},"protocol":{"type":"string","description":"The network protocol this rule controls.","description_kind":"plain","required":true}},"description":"A firewall rule that specifies what outbound network traffic is allowed.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_firewall_device":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"When this Firewall Device was created.","description_kind":"plain","computed":true},"entity_id":{"type":"number","description":"The ID of the entity to create a Firewall device for.","description_kind":"plain","required":true},"entity_type":{"type":"string","description":"The type of the entity to create a Firewall device for.","description_kind":"plain","optional":true},"firewall_id":{"type":"number","description":"The ID of the Firewall to access.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"updated":{"type":"string","description":"When this Firewall Device was updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_image":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"When this Image was created.","description_kind":"plain","computed":true},"created_by":{"type":"string","description":"The name of the User who created this Image.","description_kind":"plain","computed":true},"deprecated":{"type":"bool","description":"Whether or not this Image is deprecated. Will only be True for deprecated public Images.","description_kind":"plain","computed":true},"description":{"type":"string","description":"A detailed description of this Image.","description_kind":"plain","optional":true},"disk_id":{"type":"number","description":"The ID of the Linode Disk that this Image will be created from.","description_kind":"plain","optional":true},"expiry":{"type":"string","description":"Only Images created automatically (from a deleted Linode; type=automatic) will expire.","description_kind":"plain","computed":true},"file_hash":{"type":"string","description":"The MD5 hash of the image file.","description_kind":"plain","optional":true,"computed":true},"file_path":{"type":"string","description":"The name of the file to upload to this image.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_public":{"type":"bool","description":"True if the Image is public.","description_kind":"plain","computed":true},"label":{"type":"string","description":"A short description of the Image. Labels cannot contain special characters.","description_kind":"plain","required":true},"linode_id":{"type":"number","description":"The ID of the Linode that this Image will be created from.","description_kind":"plain","optional":true},"region":{"type":"string","description":"The region to upload to.","description_kind":"plain","optional":true},"size":{"type":"number","description":"The minimum size this Image needs to deploy. Size is in MB.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The current status of this Image.","description_kind":"plain","computed":true},"type":{"type":"string","description":"How the Image was created. 'Manual' Images can be created at any time. 'Automatic' images are created automatically from a deleted Linode.","description_kind":"plain","computed":true},"vendor":{"type":"string","description":"The upstream distribution vendor. Nil for private Images.","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_instance":{"version":0,"block":{"attributes":{"authorized_keys":{"type":["list","string"],"description":"A list of SSH public keys to deploy for the root user on the newly created Linode. Only accepted if 'image' is provided.","description_kind":"plain","optional":true},"authorized_users":{"type":["list","string"],"description":"A list of Linode usernames. If the usernames have associated SSH keys, the keys will be appended to the `root` user's `~/.ssh/authorized_keys` file automatically. Only accepted if 'image' is provided.","description_kind":"plain","optional":true},"backup_id":{"type":"number","description":"A Backup ID from another Linode's available backups. Your User must have read_write access to that Linode, the Backup must have a status of successful, and the Linode must be deployed to the same region as the Backup. See /linode/instances/{linodeId}/backups for a Linode's available backups. This field and the image field are mutually exclusive.","description_kind":"plain","optional":true},"backups":{"type":["list",["object",{"available":"bool","enabled":"bool","schedule":["list",["object",{"day":"string","window":"string"}]]}]],"description":"Information about this Linode's backups status.","description_kind":"plain","computed":true},"backups_enabled":{"type":"bool","description":"If this field is set to true, the created Linode will automatically be enrolled in the Linode Backup service. This will incur an additional charge. The cost for the Backup service is dependent on the Type of Linode deployed.","description_kind":"plain","optional":true,"computed":true},"boot_config_label":{"type":"string","description":"The Label of the Instance Config that should be used to boot the Linode instance.","description_kind":"plain","optional":true,"computed":true},"booted":{"type":"bool","description_kind":"plain","optional":true,"computed":true},"group":{"type":"string","description":"The display group of the Linode instance.","description_kind":"plain","optional":true},"host_uuid":{"type":"string","description":"The Linode’s host machine, as a UUID.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"image":{"type":"string","description":"An Image ID to deploy the Disk from. Official Linode Images start with linode/, while your Images start with private/. See /images for more information on the Images available for you to use.","description_kind":"plain","optional":true},"ip_address":{"type":"string","description":"This Linode's Public IPv4 Address. If there are multiple public IPv4 addresses on this Instance, an arbitrary address will be used for this field.","description_kind":"plain","computed":true},"ipv4":{"type":["set","string"],"description":"This Linode's IPv4 Addresses. Each Linode is assigned a single public IPv4 address upon creation, and may get a single private IPv4 address if needed. You may need to open a support ticket to get additional IPv4 addresses.","description_kind":"plain","computed":true},"ipv6":{"type":"string","description":"This Linode's IPv6 SLAAC addresses. This address is specific to a Linode, and may not be shared.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned","description_kind":"plain","optional":true,"computed":true},"private_ip":{"type":"bool","description":"If true, the created Linode will have private networking enabled, allowing use of the 192.168.128.0/17 network within the Linode's region.","description_kind":"plain","optional":true},"private_ip_address":{"type":"string","description":"This Linode's Private IPv4 Address. The regional private IP address range is 192.168.128/17 address shared by all Linode Instances in a region.","description_kind":"plain","computed":true},"region":{"type":"string","description":"This is the location where the Linode was deployed. This cannot be changed without opening a support ticket.","description_kind":"plain","required":true},"resize_disk":{"type":"bool","description":"If true, changes in Linode type will attempt to upsize or downsize implicitly created disks. This must be false if explicit disks are defined. This is an irreversible action as Linode disks cannot be automatically downsized.","description_kind":"plain","optional":true},"root_pass":{"type":"string","description":"The password that will be initialially assigned to the 'root' user account.","description_kind":"plain","optional":true,"sensitive":true},"shared_ipv4":{"type":["set","string"],"description":"A set of IPv4 addresses to share with this Linode.","description_kind":"plain","optional":true,"computed":true},"specs":{"type":["list",["object",{"disk":"number","memory":"number","transfer":"number","vcpus":"number"}]],"description":"Information about the resources available to this Linode.","description_kind":"plain","computed":true},"stackscript_data":{"type":["map","string"],"description":"An object containing responses to any User Defined Fields present in the StackScript being deployed to this Linode. Only accepted if 'stackscript_id' is given. The required values depend on the StackScript being deployed.","description_kind":"plain","optional":true,"sensitive":true},"stackscript_id":{"type":"number","description":"The StackScript to deploy to the newly created Linode. If provided, 'image' must also be provided, and must be an Image that is compatible with this StackScript.","description_kind":"plain","optional":true},"status":{"type":"string","description":"The status of the instance, indicating the current readiness state.","description_kind":"plain","computed":true},"swap_size":{"type":"number","description":"When deploying from an Image, this field is optional with a Linode API default of 512mb, otherwise it is ignored. This is used to set the swap disk size for the newly-created Linode.","description_kind":"plain","optional":true,"computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","optional":true},"type":{"type":"string","description":"The type of instance to be deployed, determining the price and size.","description_kind":"plain","optional":true},"watchdog_enabled":{"type":"bool","description":"The watchdog, named Lassie, is a Shutdown Watchdog that monitors your Linode and will reboot it if it powers off unexpectedly. It works by issuing a boot job when your Linode powers off without a shutdown job being responsible. To prevent a loop, Lassie will give up if there have been more than 5 boot jobs issued within 15 minutes.","description_kind":"plain","optional":true}},"block_types":{"alerts":{"nesting_mode":"list","block":{"attributes":{"cpu":{"type":"number","description":"The percentage of CPU usage required to trigger an alert. If the average CPU usage over two hours exceeds this value, we'll send you an alert. If this is set to 0, the alert is disabled.","description_kind":"plain","optional":true,"computed":true},"io":{"type":"number","description":"The amount of disk IO operation per second required to trigger an alert. If the average disk IO over two hours exceeds this value, we'll send you an alert. If set to 0, this alert is disabled.","description_kind":"plain","optional":true,"computed":true},"network_in":{"type":"number","description":"The amount of incoming traffic, in Mbit/s, required to trigger an alert. If the average incoming traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled.","description_kind":"plain","optional":true,"computed":true},"network_out":{"type":"number","description":"The amount of outbound traffic, in Mbit/s, required to trigger an alert. If the average outbound traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled.","description_kind":"plain","optional":true,"computed":true},"transfer_quota":{"type":"number","description":"The percentage of network transfer that may be used before an alert is triggered. When this value is exceeded, we'll alert you. If this is set to 0 (zero), the alert is disabled.","description_kind":"plain","optional":true,"computed":true}},"description":"Configuration options for alert triggers on this Linode.","description_kind":"plain"},"max_items":1},"config":{"nesting_mode":"list","block":{"attributes":{"comments":{"type":"string","description":"Optional field for arbitrary User comments on this Config.","description_kind":"plain","optional":true},"kernel":{"type":"string","description":"A Kernel ID to boot a Linode with. Default is based on image choice. (examples: linode/latest-64bit, linode/grub2, linode/direct-disk)","description_kind":"plain","optional":true},"label":{"type":"string","description":"The Config's label for display purposes. Also used by `boot_config_label`.","description_kind":"plain","required":true},"memory_limit":{"type":"number","description":"Defaults to the total RAM of the Linode","description_kind":"plain","optional":true},"root_device":{"type":"string","description":"The root device to boot. The corresponding disk must be attached.","description_kind":"plain","optional":true,"computed":true},"run_level":{"type":"string","description":"Defines the state of your Linode after booting. Defaults to default.","description_kind":"plain","optional":true},"virt_mode":{"type":"string","description":"Controls the virtualization mode. Defaults to paravirt.","description_kind":"plain","optional":true}},"block_types":{"devices":{"nesting_mode":"list","block":{"block_types":{"sda":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdb":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdc":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdd":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sde":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdf":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdg":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdh":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1}},"description":"Device sda-sdh can be either a Disk or Volume identified by disk_label or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"helpers":{"nesting_mode":"list","block":{"attributes":{"devtmpfs_automount":{"type":"bool","description":"Populates the /dev directory early during boot without udev. Defaults to false.","description_kind":"plain","optional":true},"distro":{"type":"bool","description":"Controls the behavior of the Linode Config's Distribution Helper setting.","description_kind":"plain","optional":true},"modules_dep":{"type":"bool","description":"Creates a modules dependency file for the Kernel you run.","description_kind":"plain","optional":true},"network":{"type":"bool","description":"Controls the behavior of the Linode Config's Network Helper setting, used to automatically configure additional IP addresses assigned to this instance.","description_kind":"plain","optional":true},"updatedb_disabled":{"type":"bool","description":"Disables updatedb cron job to avoid disk thrashing.","description_kind":"plain","optional":true}},"description":"Helpers enabled when booting to this Linode Config.","description_kind":"plain"},"max_items":1},"interface":{"nesting_mode":"list","block":{"attributes":{"ipam_address":{"type":"string","description":"The IPAM Address of this interface.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The unique label of this interface.","description_kind":"plain","optional":true},"purpose":{"type":"string","description":"The purpose of this interface.","description_kind":"plain","optional":true}},"description":"An array of Network Interfaces for this Linode’s Configuration Profile.","description_kind":"plain"}}},"description":"Configuration profiles define the VM settings and boot behavior of the Linode Instance.","description_kind":"plain"}},"disk":{"nesting_mode":"list","block":{"attributes":{"authorized_keys":{"type":["list","string"],"description":"A list of SSH public keys to deploy for the root user on the newly created Linode. Only accepted if 'image' is provided.","description_kind":"plain","optional":true},"authorized_users":{"type":["list","string"],"description":"A list of Linode usernames. If the usernames have associated SSH keys, the keys will be appended to the `root` user's `~/.ssh/authorized_keys` file automatically. Only accepted if 'image' is provided.","description_kind":"plain","optional":true},"filesystem":{"type":"string","description":"The Disk filesystem can be one of: raw, swap, ext3, ext4, initrd (max 32mb)","description_kind":"plain","optional":true,"computed":true},"id":{"type":"number","description":"The ID of the Disk (for use in Linode Image resources and Linode Instance Config Devices)","description_kind":"plain","computed":true},"image":{"type":"string","description":"An Image ID to deploy the Disk from. Official Linode Images start with linode/, while your Images start with private/.","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The disks label, which acts as an identifier in Terraform.","description_kind":"plain","required":true},"read_only":{"type":"bool","description":"If true, this Disk is read-only.","description_kind":"plain","optional":true,"computed":true},"root_pass":{"type":"string","description":"The password that will be initialially assigned to the 'root' user account.","description_kind":"plain","optional":true,"sensitive":true},"size":{"type":"number","description":"The size of the Disk in MB.","description_kind":"plain","required":true},"stackscript_data":{"type":["map","string"],"description":"An object containing responses to any User Defined Fields present in the StackScript being deployed to this Linode. Only accepted if 'stackscript_id' is given. The required values depend on the StackScript being deployed.","description_kind":"plain","optional":true,"computed":true,"sensitive":true},"stackscript_id":{"type":"number","description":"The StackScript to deploy to the newly created Linode. If provided, 'image' must also be provided, and must be an Image that is compatible with this StackScript.","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"interface":{"nesting_mode":"list","block":{"attributes":{"ipam_address":{"type":"string","description":"The IPAM Address of this interface.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The unique label of this interface.","description_kind":"plain","optional":true},"purpose":{"type":"string","description":"The purpose of this interface.","description_kind":"plain","optional":true}},"description":"An array of Network Interfaces for this Linode to be created with. If an explicit config or disk is defined, interfaces must be declared in the config block.","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"}},"linode_instance_config":{"version":0,"block":{"attributes":{"booted":{"type":"bool","description":"If true, the Linode will be booted to running state. If false, the Linode will be shutdown. If undefined, no action will be taken.","description_kind":"plain","optional":true,"computed":true},"comments":{"type":"string","description":"Optional field for arbitrary User comments on this Config.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kernel":{"type":"string","description":"A Kernel ID to boot a Linode with. Defaults to “linode/latest-64bit”.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The Config’s label for display purposes only.","description_kind":"plain","required":true},"linode_id":{"type":"number","description":"The ID of the Linode to create this configuration profile under.","description_kind":"plain","required":true},"memory_limit":{"type":"number","description":"The memory limit of the Linode.","description_kind":"plain","optional":true,"computed":true},"root_device":{"type":"string","description":"The root device to boot. If no value or an invalid value is provided, root device will default to /dev/sda. If the device specified at the root device location is not mounted, the Linode will not boot until a device is mounted.","description_kind":"plain","optional":true},"run_level":{"type":"string","description":"Defines the state of your Linode after booting.","description_kind":"plain","optional":true},"virt_mode":{"type":"string","description":"Controls the virtualization mode.","description_kind":"plain","optional":true}},"block_types":{"devices":{"nesting_mode":"list","block":{"block_types":{"sda":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdb":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdc":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdd":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sde":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdf":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdg":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdh":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1}},"description":"A dictionary of device disks to use as a device map in a Linode’s configuration profile.","description_kind":"plain"},"max_items":1},"helpers":{"nesting_mode":"list","block":{"attributes":{"devtmpfs_automount":{"type":"bool","description":"Populates the /dev directory early during boot without udev.","description_kind":"plain","optional":true},"distro":{"type":"bool","description":"Helps maintain correct inittab/upstart console device.","description_kind":"plain","optional":true},"modules_dep":{"type":"bool","description":"Creates a modules dependency file for the Kernel you run.","description_kind":"plain","optional":true},"network":{"type":"bool","description":"Automatically configures static networking.","description_kind":"plain","optional":true},"updatedb_disabled":{"type":"bool","description":"Disables updatedb cron job to avoid disk thrashing.","description_kind":"plain","optional":true}},"description":"Helpers enabled when booting to this Linode Config.","description_kind":"plain"}},"interface":{"nesting_mode":"list","block":{"attributes":{"ipam_address":{"type":"string","description":"This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The name of this interface.","description_kind":"plain","optional":true},"purpose":{"type":"string","description":"The type of interface.","description_kind":"plain","required":true}},"description":"An array of Network Interfaces to add to this Linode’s Configuration Profile.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_instance_disk":{"version":0,"block":{"attributes":{"authorized_keys":{"type":["set","string"],"description":"A list of public SSH keys that will be automatically appended to the root user’s ~/.ssh/authorized_keys file when deploying from an Image.","description_kind":"plain","optional":true},"authorized_users":{"type":["set","string"],"description":"A list of usernames. If the usernames have associated SSH keys, the keys will be appended to the root users ~/.ssh/authorized_keys file automatically when deploying from an Image.","description_kind":"plain","optional":true},"created":{"type":"string","description":"When this disk was created.","description_kind":"plain","computed":true},"filesystem":{"type":"string","description":"The filesystem of this disk.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"image":{"type":"string","description":"An Image ID to deploy the Linode Disk from.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The Disk’s label is for display purposes only.","description_kind":"plain","required":true},"linode_id":{"type":"number","description":"The ID of the Linode to assign this disk to.","description_kind":"plain","required":true},"root_pass":{"type":"string","description":"This sets the root user’s password on a newly-created Linode Disk when deploying from an Image.","description_kind":"plain","optional":true,"sensitive":true},"size":{"type":"number","description":"The size of the Disk in MB.","description_kind":"plain","required":true},"stackscript_data":{"type":["map","string"],"description":"An object containing responses to any User Defined Fields present in the StackScript being deployed to this Disk. Only accepted if 'stackscript_id' is given. The required values depend on the StackScript being deployed.","description_kind":"plain","optional":true,"sensitive":true},"stackscript_id":{"type":"number","description":"A StackScript ID that will cause the referenced StackScript to be run during deployment of this Linode.","description_kind":"plain","optional":true},"status":{"type":"string","description":"A brief description of this Disk's current state.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this disk was last updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_instance_ip":{"version":0,"block":{"attributes":{"address":{"type":"string","description":"The resulting IPv4 address.","description_kind":"plain","computed":true},"apply_immediately":{"type":"bool","description":"If true, the instance will be rebooted to update network interfaces.","description_kind":"plain","optional":true},"gateway":{"type":"string","description":"The default gateway for this address","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"linode_id":{"type":"number","description":"The ID of the Linode to allocate an IPv4 address for.","description_kind":"plain","required":true},"prefix":{"type":"number","description":"The number of bits set in the subnet mask.","description_kind":"plain","computed":true},"public":{"type":"bool","description":"Whether the IPv4 address is public or private.","description_kind":"plain","optional":true},"rdns":{"type":"string","description":"The reverse DNS assigned to this address.","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"The region this IP resides in.","description_kind":"plain","computed":true},"subnet_mask":{"type":"string","description":"The mask that separates host bits from network bits for this address.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The type of IP address.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_instance_shared_ips":{"version":0,"block":{"attributes":{"addresses":{"type":["set","string"],"description":"A set of IP addresses to share to the Linode","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"linode_id":{"type":"number","description":"The ID of the Linode to share these IP addresses with.","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_ipv6_range":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_bgp":{"type":"bool","description":"Whether this IPv6 range is shared.","description_kind":"plain","computed":true},"linode_id":{"type":"number","description":"The ID of the Linode to assign this range to.","description_kind":"plain","optional":true},"linodes":{"type":["set","number"],"description":"A list of Linodes targeted by this IPv6 range. Includes Linodes with IP sharing.","description_kind":"plain","computed":true},"prefix_length":{"type":"number","description":"The prefix length of the IPv6 range.","description_kind":"plain","required":true},"range":{"type":"string","description":"The IPv6 range of addresses in this pool.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region for this range of IPv6 addresses.","description_kind":"plain","computed":true},"route_target":{"type":"string","description":"The IPv6 SLAAC address to assign this range to.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"linode_lke_cluster":{"version":0,"block":{"attributes":{"api_endpoints":{"type":["list","string"],"description":"The API endpoints for the cluster.","description_kind":"plain","computed":true},"dashboard_url":{"type":"string","description":"The dashboard URL of the cluster.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"k8s_version":{"type":"string","description":"The desired Kubernetes version for this Kubernetes cluster in the format of \u003cmajor\u003e.\u003cminor\u003e. The latest supported patch version will be deployed.","description_kind":"plain","required":true},"kubeconfig":{"type":"string","description":"The Base64-encoded Kubeconfig for the cluster.","description_kind":"plain","computed":true,"sensitive":true},"label":{"type":"string","description":"The unique label for the cluster.","description_kind":"plain","required":true},"region":{"type":"string","description":"This cluster's location.","description_kind":"plain","required":true},"status":{"type":"string","description":"The status of the cluster.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","optional":true}},"block_types":{"control_plane":{"nesting_mode":"list","block":{"attributes":{"high_availability":{"type":"bool","description":"Defines whether High Availability is enabled for the Control Plane Components of the cluster.","description_kind":"plain","optional":true,"computed":true}},"description":"Defines settings for the Kubernetes Control Plane.","description_kind":"plain"},"max_items":1},"pool":{"nesting_mode":"list","block":{"attributes":{"count":{"type":"number","description":"The number of nodes in the Node Pool.","description_kind":"plain","required":true},"id":{"type":"number","description":"The ID of the Node Pool.","description_kind":"plain","computed":true},"nodes":{"type":["list",["object",{"id":"string","instance_id":"number","status":"string"}]],"description":"The nodes in the node pool.","description_kind":"plain","computed":true},"type":{"type":"string","description":"A Linode Type for all of the nodes in the Node Pool.","description_kind":"plain","required":true}},"block_types":{"autoscaler":{"nesting_mode":"list","block":{"attributes":{"max":{"type":"number","description":"The maximum number of nodes to autoscale to.","description_kind":"plain","required":true},"min":{"type":"number","description":"The minimum number of nodes to autoscale to.","description_kind":"plain","required":true}},"description":"When specified, the number of nodes autoscales within the defined minimum and maximum values.","description_kind":"plain"},"max_items":1}},"description":"A node pool in the cluster.","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"}},"linode_nodebalancer":{"version":1,"block":{"attributes":{"client_conn_throttle":{"type":"number","description":"Throttle connections per second (0-20). Set to 0 (zero) to disable throttling.","description_kind":"plain","optional":true},"created":{"type":"string","description":"When this NodeBalancer was created.","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"This NodeBalancer's hostname, ending with .nodebalancer.linode.com","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipv4":{"type":"string","description":"The Public IPv4 Address of this NodeBalancer","description_kind":"plain","computed":true},"ipv6":{"type":"string","description":"The Public IPv6 Address of this NodeBalancer","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of the Linode NodeBalancer.","description_kind":"plain","optional":true},"region":{"type":"string","description":"The region where this NodeBalancer will be deployed.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","optional":true},"transfer":{"type":["list",["object",{"in":"number","out":"number","total":"number"}]],"description":"Information about the amount of transfer this NodeBalancer has had so far this month.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this NodeBalancer was last updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_nodebalancer_config":{"version":1,"block":{"attributes":{"algorithm":{"type":"string","description":"What algorithm this NodeBalancer should use for routing traffic to backends: roundrobin, leastconn, source","description_kind":"plain","optional":true,"computed":true},"check":{"type":"string","description":"The type of check to perform against backends to ensure they are serving requests. This is used to determine if backends are up or down. If none no check is performed. connection requires only a connection to the backend to succeed. http and http_body rely on the backend serving HTTP, and that the response returned matches what is expected.","description_kind":"plain","optional":true,"computed":true},"check_attempts":{"type":"number","description":"How many times to attempt a check before considering a backend to be down. (1-30)","description_kind":"plain","optional":true,"computed":true},"check_body":{"type":"string","description":"This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down","description_kind":"plain","optional":true,"computed":true},"check_interval":{"type":"number","description":"How often, in seconds, to check that backends are up and serving requests.","description_kind":"plain","optional":true,"computed":true},"check_passive":{"type":"bool","description":"If true, any response from this backend with a 5xx status code will be enough for it to be considered unhealthy and taken out of rotation.","description_kind":"plain","optional":true,"computed":true},"check_path":{"type":"string","description":"The URL path to check on each backend. If the backend does not respond to this request it is considered to be down.","description_kind":"plain","optional":true,"computed":true},"check_timeout":{"type":"number","description":"How long, in seconds, to wait for a check attempt before considering it failed. (1-30)","description_kind":"plain","optional":true,"computed":true},"cipher_suite":{"type":"string","description":"What ciphers to use for SSL connections served by this NodeBalancer. `legacy` is considered insecure and should only be used if necessary.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"node_status":{"type":["list",["object",{"down":"number","up":"number"}]],"description":"A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends.","description_kind":"plain","computed":true},"nodebalancer_id":{"type":"number","description":"The ID of the NodeBalancer to access.","description_kind":"plain","required":true},"port":{"type":"number","description":"The TCP port this Config is for. These values must be unique across configs on a single NodeBalancer (you can't have two configs for port 80, for example). While some ports imply some protocols, no enforcement is done and you may configure your NodeBalancer however is useful to you. For example, while port 443 is generally used for HTTPS, you do not need SSL configured to have a NodeBalancer listening on port 443.","description_kind":"plain","optional":true},"protocol":{"type":"string","description":"The protocol this port is configured to serve. If this is set to https you must include an ssl_cert and an ssl_key.","description_kind":"plain","optional":true},"proxy_protocol":{"type":"string","description":"The version of ProxyProtocol to use for the underlying NodeBalancer. This requires protocol to be `tcp`. Valid values are `none`, `v1`, and `v2`.","description_kind":"plain","optional":true},"ssl_cert":{"type":"string","description":"The certificate this port is serving. This is not returned. If set, this field will come back as `\u003cREDACTED\u003e`. Please use the ssl_commonname and ssl_fingerprint to identify the certificate.","description_kind":"plain","optional":true,"sensitive":true},"ssl_commonname":{"type":"string","description":"The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.","description_kind":"plain","computed":true},"ssl_fingerprint":{"type":"string","description":"The read-only fingerprint automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.","description_kind":"plain","computed":true},"ssl_key":{"type":"string","description":"The private key corresponding to this port's certificate. This is not returned. If set, this field will come back as `\u003cREDACTED\u003e`. Please use the ssl_commonname and ssl_fingerprint to identify the certificate.","description_kind":"plain","optional":true,"sensitive":true},"stickiness":{"type":"string","description":"Controls how session stickiness is handled on this port: 'none', 'table', 'http_cookie'","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"linode_nodebalancer_node":{"version":0,"block":{"attributes":{"address":{"type":"string","description":"The private IP Address and port (IP:PORT) where this backend can be reached. This must be a private IP address.","description_kind":"plain","required":true},"config_id":{"type":"number","description":"The ID of the NodeBalancerConfig to access.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label for this node. This is for display purposes only.","description_kind":"plain","required":true},"mode":{"type":"string","description":"The mode this NodeBalancer should use when sending traffic to this backend. If set to `accept` this backend is accepting traffic. If set to `reject` this backend will not receive traffic. If set to `drain` this backend will not receive new traffic, but connections already pinned to it will continue to be routed to it. If set to `backup` this backend will only accept traffic if all other nodes are down.","description_kind":"plain","optional":true,"computed":true},"nodebalancer_id":{"type":"number","description":"The ID of the NodeBalancer to access.","description_kind":"plain","required":true},"status":{"type":"string","description":"The current status of this node, based on the configured checks of its NodeBalancer Config. (unknown, UP, DOWN)","description_kind":"plain","computed":true},"weight":{"type":"number","description":"Used when picking a backend to serve a request and is not pinned to a single backend yet. Nodes with a higher weight will receive more traffic. (1-255)","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"linode_object_storage_bucket":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"The S3 access key to use for this resource. (Required for lifecycle_rule and versioning)","description_kind":"plain","optional":true},"acl":{"type":"string","description":"The Access Control Level of the bucket using a canned ACL string.","description_kind":"plain","optional":true},"cluster":{"type":"string","description":"The cluster of the Linode Object Storage Bucket.","description_kind":"plain","required":true},"cors_enabled":{"type":"bool","description":"If true, the bucket will be created with CORS enabled for all origins.","description_kind":"plain","optional":true},"hostname":{"type":"string","description":"The hostname where this bucket can be accessed. This hostname can be accessed through a browser if the bucket is made public.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label of the Linode Object Storage Bucket.","description_kind":"plain","required":true},"secret_key":{"type":"string","description":"The S3 secret key to use for this resource. (Required for lifecycle_rule and versioning)","description_kind":"plain","optional":true},"versioning":{"type":"bool","description":"Whether to enable versioning.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"cert":{"nesting_mode":"list","block":{"attributes":{"certificate":{"type":"string","description":"The Base64 encoded and PEM formatted SSL certificate.","description_kind":"plain","required":true,"sensitive":true},"private_key":{"type":"string","description":"The private key associated with the TLS/SSL certificate.","description_kind":"plain","required":true,"sensitive":true}},"description":"The cert used by this Object Storage Bucket.","description_kind":"plain"},"max_items":1},"lifecycle_rule":{"nesting_mode":"list","block":{"attributes":{"abort_incomplete_multipart_upload_days":{"type":"number","description":"Specifies the number of days after initiating a multipart upload when the multipart upload must be completed.","description_kind":"plain","optional":true},"enabled":{"type":"bool","description":"Specifies whether the lifecycle rule is active.","description_kind":"plain","required":true},"id":{"type":"string","description":"The unique identifier for the rule.","description_kind":"plain","optional":true,"computed":true},"prefix":{"type":"string","description":"The object key prefix identifying one or more objects to which the rule applies.","description_kind":"plain","optional":true}},"block_types":{"expiration":{"nesting_mode":"list","block":{"attributes":{"date":{"type":"string","description":"Specifies the date after which you want the corresponding action to take effect.","description_kind":"plain","optional":true},"days":{"type":"number","description":"Specifies the number of days after object creation when the specific rule action takes effect.","description_kind":"plain","optional":true},"expired_object_delete_marker":{"type":"bool","description":"Directs Linode Object Storage to remove expired deleted markers.","description_kind":"plain","optional":true}},"description":"Specifies a period in the object's expire.","description_kind":"plain"},"max_items":1},"noncurrent_version_expiration":{"nesting_mode":"list","block":{"attributes":{"days":{"type":"number","description":"Specifies the number of days non-current object versions expire.","description_kind":"plain","required":true}},"description":"Specifies when non-current object versions expire.","description_kind":"plain"},"max_items":1}},"description":"Lifecycle rules to be applied to the bucket.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_object_storage_key":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"This keypair's access key. This is not secret.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label given to this key. For display purposes only.","description_kind":"plain","required":true},"limited":{"type":"bool","description":"Whether or not this key is a limited access key.","description_kind":"plain","computed":true},"secret_key":{"type":"string","description":"This keypair's secret key.","description_kind":"plain","computed":true,"sensitive":true}},"block_types":{"bucket_access":{"nesting_mode":"list","block":{"attributes":{"bucket_name":{"type":"string","description":"The unique label of the bucket to which the key will grant limited access.","description_kind":"plain","required":true},"cluster":{"type":"string","description":"The Object Storage cluster where a bucket to which the key is granting access is hosted.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"This Limited Access Key’s permissions for the selected bucket.","description_kind":"plain","required":true}},"description":"A list of permissions to grant this limited access key.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_object_storage_object":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"The S3 access key with access to the target bucket.","description_kind":"plain","required":true},"acl":{"type":"string","description":"The ACL config given to this object.","description_kind":"plain","optional":true},"bucket":{"type":"string","description":"The target bucket to put this object in.","description_kind":"plain","required":true},"cache_control":{"type":"string","description":"This cache_control configuration of this object.","description_kind":"plain","optional":true},"cluster":{"type":"string","description":"The target cluster that the bucket is in.","description_kind":"plain","required":true},"content":{"type":"string","description":"The contents of the Object to upload.","description_kind":"plain","optional":true},"content_base64":{"type":"string","description":"The base64 contents of the Object to upload.","description_kind":"plain","optional":true},"content_disposition":{"type":"string","description":"The content disposition configuration of this object.","description_kind":"plain","optional":true},"content_encoding":{"type":"string","description":"The encoding of the content of this object.","description_kind":"plain","optional":true},"content_language":{"type":"string","description":"The language metadata of this object.","description_kind":"plain","optional":true},"content_type":{"type":"string","description":"The MIME type of the content.","description_kind":"plain","optional":true,"computed":true},"etag":{"type":"string","description":"The specific version of this object.","description_kind":"plain","optional":true,"computed":true},"force_destroy":{"type":"bool","description":"Whether the object should bypass deletion restrictions.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The name of the uploaded object.","description_kind":"plain","required":true},"metadata":{"type":["map","string"],"description":"The metadata of this object","description_kind":"plain","optional":true},"secret_key":{"type":"string","description":"The S3 secret key with access to the target bucket.","description_kind":"plain","required":true},"source":{"type":"string","description":"The source file to upload.","description_kind":"plain","optional":true},"version_id":{"type":"string","description":"The version ID of this object.","description_kind":"plain","computed":true},"website_redirect":{"type":"string","description":"The website redirect location of this object.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"linode_rdns":{"version":0,"block":{"attributes":{"address":{"type":"string","description":"The public Linode IPv4 or IPv6 address to operate on.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"rdns":{"type":"string","description":"The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.","description_kind":"plain","required":true},"wait_for_available":{"type":"bool","description":"If true, the RDNS assignment will be retried within the operation timeout period.","description_kind":"plain","optional":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_sshkey":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date this key was added.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label of the Linode SSH Key.","description_kind":"plain","required":true},"ssh_key":{"type":"string","description":"The public SSH Key, which is used to authenticate to the root user of the Linodes you deploy.","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_stackscript":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date this StackScript was created.","description_kind":"plain","computed":true},"deployments_active":{"type":"number","description":"Count of currently active, deployed Linodes created from this StackScript.","description_kind":"plain","computed":true},"deployments_total":{"type":"number","description":"The total number of times this StackScript has been deployed.","description_kind":"plain","computed":true},"description":{"type":"string","description":"A description for the StackScript.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"images":{"type":["list","string"],"description":"An array of Image IDs representing the Images that this StackScript is compatible for deploying with.","description_kind":"plain","required":true},"is_public":{"type":"bool","description":"This determines whether other users can use your StackScript. Once a StackScript is made public, it cannot be made private.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The StackScript's label is for display purposes only.","description_kind":"plain","required":true},"rev_note":{"type":"string","description":"This field allows you to add notes for the set of revisions made to this StackScript.","description_kind":"plain","optional":true},"script":{"type":"string","description":"The script to execute when provisioning a new Linode with this StackScript.","description_kind":"plain","required":true},"updated":{"type":"string","description":"The date this StackScript was updated.","description_kind":"plain","computed":true},"user_defined_fields":{"type":["list",["object",{"default":"string","example":"string","label":"string","many_of":"string","name":"string","one_of":"string"}]],"description":"This is a list of fields defined with a special syntax inside this StackScript that allow for supplying customized parameters during deployment.","description_kind":"plain","optional":true,"computed":true},"user_gravatar_id":{"type":"string","description":"The Gravatar ID for the User who created the StackScript.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The User who created the StackScript.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_token":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date and time this token was created.","description_kind":"plain","computed":true},"expiry":{"type":"string","description":"When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. Tokens may be created with 'null' as their expiry and will never expire unless revoked.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label of the Linode Token.","description_kind":"plain","optional":true},"scopes":{"type":"string","description":"The scopes this token was created with. These define what parts of the Account the token can be used to access. Many command-line tools, such as the Linode CLI, require tokens with access to *. Tokens with more restrictive scopes are generally more secure.","description_kind":"plain","required":true},"token":{"type":"string","description":"The token used to access the API.","description_kind":"plain","computed":true,"sensitive":true}},"description_kind":"plain"}},"linode_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email of the user.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"restricted":{"type":"bool","description":"If true, the user must be explicitly granted access to platform actions and entities.","description_kind":"plain","optional":true},"ssh_keys":{"type":["list","string"],"description":"SSH keys to add to the user profile.","description_kind":"plain","computed":true},"tfa_enabled":{"type":"bool","description":"If the User has Two Factor Authentication (TFA) enabled.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The username of the user.","description_kind":"plain","required":true}},"block_types":{"domain_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"firewall_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"global_grants":{"nesting_mode":"list","block":{"attributes":{"account_access":{"type":"string","description":"The level of access this User has to Account-level actions, like billing information. A restricted User will never be able to manage users.","description_kind":"plain","optional":true},"add_databases":{"type":"bool","description":"If true, this User may add Databases.","description_kind":"plain","optional":true},"add_domains":{"type":"bool","description":"If true, this User may add Domains.","description_kind":"plain","optional":true},"add_firewalls":{"type":"bool","description":"If true, this User may add Firewalls.","description_kind":"plain","optional":true},"add_images":{"type":"bool","description":"If true, this User may add Images.","description_kind":"plain","optional":true},"add_linodes":{"type":"bool","description":"If true, this User may create Linodes.","description_kind":"plain","optional":true},"add_longview":{"type":"bool","description":"If true, this User may create Longview clients and view the current plan.","description_kind":"plain","optional":true},"add_nodebalancers":{"type":"bool","description":"If true, this User may add NodeBalancers.","description_kind":"plain","optional":true},"add_stackscripts":{"type":"bool","description":"If true, this User may add StackScripts.","description_kind":"plain","optional":true},"add_volumes":{"type":"bool","description":"If true, this User may add Volumes.","description_kind":"plain","optional":true},"cancel_account":{"type":"bool","description":"If true, this User may cancel the entire Account.","description_kind":"plain","optional":true},"longview_subscription":{"type":"bool","description":"If true, this User may manage the Account’s Longview subscription.","description_kind":"plain","optional":true}},"description":"A structure containing the Account-level grants a User has.","description_kind":"plain"},"max_items":1},"image_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"linode_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"longview_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"nodebalancer_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"stackscript_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"volume_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_volume":{"version":0,"block":{"attributes":{"filesystem_path":{"type":"string","description":"The full filesystem path for the Volume based on the Volume's label. Path is /dev/disk/by-id/scsi-0Linode_Volume_ + Volume label.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label of the Linode Volume.","description_kind":"plain","required":true},"linode_id":{"type":"number","description":"The Linode ID where the Volume should be attached.","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"The region where this volume will be deployed.","description_kind":"plain","optional":true,"computed":true},"size":{"type":"number","description":"Size of the Volume in GB","description_kind":"plain","optional":true,"computed":true},"source_volume_id":{"type":"number","description":"The ID of a volume to clone.","description_kind":"plain","optional":true},"status":{"type":"string","description":"The status of the volume, indicating the current readiness state.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","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"}}},"data_source_schemas":{"linode_account":{"version":0,"block":{"attributes":{"address_1":{"type":"string","description":"First line of this Account's billing address.","description_kind":"plain","computed":true},"address_2":{"type":"string","description":"Second line of this Account's billing address.","description_kind":"plain","computed":true},"balance":{"type":"number","description":"This Account's balance, in US dollars.","description_kind":"plain","computed":true},"city":{"type":"string","description":"The city for this Account's billing address.","description_kind":"plain","computed":true},"company":{"type":"string","description":"The company name associated with this Account.","description_kind":"plain","computed":true},"country":{"type":"string","description":"The two-letter country code of this Account's billing address.","description_kind":"plain","computed":true},"email":{"type":"string","description":"The email address for this Account, for account management communications, and may be used for other communications as configured.","description_kind":"plain","computed":true},"first_name":{"type":"string","description":"The first name of the person associated with this Account.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"last_name":{"type":"string","description":"The last name of the person associated with this Account.","description_kind":"plain","computed":true},"phone":{"type":"string","description":"The phone number associated with this Account.","description_kind":"plain","computed":true},"state":{"type":"string","description":"If billing address is in the United States, this is the State portion of the Account's billing address. If the address is outside the US, this is the Province associated with the Account's billing address.","description_kind":"plain","computed":true},"zip":{"type":"string","description":"The zip code of this Account's billing address.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_account_login":{"version":0,"block":{"attributes":{"datetime":{"type":"string","description":"The time when the login was initiated.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID of this login object.","description_kind":"plain","required":true},"ip":{"type":"string","description":"The remote IP address that requested the login.","description_kind":"plain","computed":true},"restricted":{"type":"bool","description":"TTrue if the User that was logged into was a restricted User, false otherwise.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The username of the User that was logged into.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_account_logins":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"logins":{"type":["list",["object",{"datetime":"string","id":"number","ip":"string","restricted":"bool","username":"string"}]],"description":"The returned list of account logins.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_database_backups":{"version":0,"block":{"attributes":{"backups":{"type":["list",["object",{"created":"string","id":"number","label":"string","type":"string"}]],"description":"The returned list of backups.","description_kind":"plain","computed":true},"database_id":{"type":"number","description":"The ID of the Managed Database.","description_kind":"plain","required":true},"database_type":{"type":"string","description":"The type of the Managed Database","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"latest":{"type":"bool","description":"If true, only the latest backup will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_database_engines":{"version":0,"block":{"attributes":{"engines":{"type":["list",["object",{"engine":"string","id":"string","version":"string"}]],"description":"The returned list of engines.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"latest":{"type":"bool","description":"If true, only the latest engine version will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_database_mongodb":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","computed":true},"compression_type":{"type":"string","description":"The type of data compression for this Database.","description_kind":"plain","computed":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"database_id":{"type":"number","description":"The ID of the MongoDB database.","description_kind":"plain","required":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","computed":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. mongodb/4.4.10)","description_kind":"plain","computed":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","computed":true},"peers":{"type":["set","string"],"description":"A set of peer addresses for this Database.","description_kind":"plain","computed":true},"port":{"type":"number","description":"The access port for this Managed Database.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","computed":true},"replica_set":{"type":"string","description":"Label for configuring a MongoDB replica set. Choose the same label on multiple Databases to include them in the same replica set.","description_kind":"plain","computed":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"storage_engine":{"type":"string","description":"The type of storage engine for this Database.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"updates":{"type":["list",["object",{"day_of_week":"string","duration":"number","frequency":"string","hour_of_day":"number","week_of_month":"number"}]],"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_database_mysql":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","computed":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"database_id":{"type":"number","description":"The ID of the MySQL database.","description_kind":"plain","required":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","computed":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. mysql/8.0.26)","description_kind":"plain","computed":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","computed":true},"replication_type":{"type":"string","description":"The replication method used for the Managed Database.","description_kind":"plain","computed":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"updates":{"type":["list",["object",{"day_of_week":"string","duration":"number","frequency":"string","hour_of_day":"number","week_of_month":"number"}]],"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_database_mysql_backups":{"version":0,"block":{"attributes":{"backups":{"type":["list",["object",{"created":"string","id":"number","label":"string","type":"string"}]],"description":"The returned list of backups.","description_kind":"plain","computed":true},"database_id":{"type":"number","description":"The ID of the Managed MySQL Database.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"latest":{"type":"bool","description":"If true, only the latest backup will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_database_postgresql":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","computed":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"database_id":{"type":"number","description":"The ID of the MongoDB database.","description_kind":"plain","required":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","computed":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. postgresql/12.6)","description_kind":"plain","computed":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","computed":true},"port":{"type":"number","description":"The access port for this Managed Database.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","computed":true},"replication_commit_type":{"type":"string","description":"The synchronization level of the replicating server.","description_kind":"plain","computed":true},"replication_type":{"type":"string","description":"The replication method used for the Managed Database.","description_kind":"plain","computed":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"updates":{"type":["list",["object",{"day_of_week":"string","duration":"number","frequency":"string","hour_of_day":"number","week_of_month":"number"}]],"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_databases":{"version":0,"block":{"attributes":{"databases":{"type":["list",["object",{"allow_list":["list","string"],"cluster_size":"number","created":"string","encrypted":"bool","engine":"string","host_primary":"string","host_secondary":"string","id":"number","instance_uri":"string","label":"string","region":"string","replication_type":"string","ssl_connection":"bool","status":"string","type":"string","updated":"string","version":"string"}]],"description":"The returned list of databases.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"latest":{"type":"bool","description":"If true, only the latest created database will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_domain":{"version":0,"block":{"attributes":{"axfr_ips":{"type":["set","string"],"description":"The list of IPs that may perform a zone transfer for this Domain. This is potentially dangerous, and should be set to an empty list unless you intend to use it.","description_kind":"plain","computed":true},"description":{"type":"string","description":"A description for this Domain. This is for display purposes only.","description_kind":"plain","computed":true},"domain":{"type":"string","description":"The domain this Domain represents. These must be unique in Linode's system; there cannot be two Domain records representing the same domain.","description_kind":"plain","optional":true},"expire_sec":{"type":"number","description":"The amount of time in seconds that may pass before this Domain is no longer authoritative. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","computed":true},"group":{"type":"string","description":"The group this Domain belongs to. This is for display purposes only.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The unique ID assigned to this domain","description_kind":"plain","optional":true},"master_ips":{"type":["set","string"],"description":"The IP addresses representing the master DNS for this Domain.","description_kind":"plain","computed":true},"refresh_sec":{"type":"number","description":"The amount of time in seconds before this Domain should be refreshed. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","computed":true},"retry_sec":{"type":"number","description":"The interval, in seconds, at which a failed refresh should be retried. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","computed":true},"soa_email":{"type":"string","description":"Start of Authority email address. This is required for master Domains.","description_kind":"plain","computed":true},"status":{"type":"string","description":"Used to control whether this Domain is currently being rendered.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","computed":true},"ttl_sec":{"type":"number","description":"'Time to Live' - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","computed":true},"type":{"type":"string","description":"If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave).","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_domain_record":{"version":0,"block":{"attributes":{"domain_id":{"type":"number","description":"The associated domain's ID.","description_kind":"plain","required":true},"id":{"type":"number","description":"The unique ID assigned to this domain record.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the Record.","description_kind":"plain","optional":true},"port":{"type":"number","description":"The port this Record points to.","description_kind":"plain","computed":true},"priority":{"type":"number","description":"The priority of the target host. Lower values are preferred.","description_kind":"plain","computed":true},"protocol":{"type":"string","description":"The protocol this Record's service communicates with. Only valid for SRV records.","description_kind":"plain","computed":true},"service":{"type":"string","description":"The service this Record identified. Only valid for SRV records.","description_kind":"plain","computed":true},"tag":{"type":"string","description":"The tag portion of a CAA record.","description_kind":"plain","computed":true},"target":{"type":"string","description":"The target for this Record. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the address the named Domain should resolve to.","description_kind":"plain","computed":true},"ttl_sec":{"type":"number","description":"The amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The type of Record this is in the DNS system.","description_kind":"plain","computed":true},"weight":{"type":"number","description":"The relative weight of this Record. Higher values are preferred.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_domain_zonefile":{"version":0,"block":{"attributes":{"domain_id":{"type":"number","description":"The domain's ID.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"zone_file":{"type":["list","string"],"description":"Lines of the zone file for the last rendered zone for this domain.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"linode_firewall":{"version":0,"block":{"attributes":{"devices":{"type":["list",["object",{"entity_id":"number","id":"number","label":"string","type":"string","url":"string"}]],"description":"The devices associated with this firewall.","description_kind":"plain","computed":true},"disabled":{"type":"bool","description":"If true, the Firewall is inactive.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID assigned to this Firewall.","description_kind":"plain","required":true},"inbound":{"type":["list",["object",{"action":"string","ipv4":["list","string"],"ipv6":["list","string"],"label":"string","ports":"string","protocol":"string"}]],"description":"A firewall rule that specifies what inbound network traffic is allowed.","description_kind":"plain","computed":true},"inbound_policy":{"type":"string","description":"The default behavior for inbound traffic. This setting can be overridden by updating the inbound.action property for an individual Firewall Rule.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.","description_kind":"plain","computed":true},"linodes":{"type":["set","number"],"description":"The IDs of Linodes to apply this firewall to.","description_kind":"plain","computed":true},"outbound":{"type":["list",["object",{"action":"string","ipv4":["list","string"],"ipv6":["list","string"],"label":"string","ports":"string","protocol":"string"}]],"description":"A firewall rule that specifies what outbound network traffic is allowed.","description_kind":"plain","computed":true},"outbound_policy":{"type":"string","description":"The default behavior for outbound traffic. This setting can be overridden by updating the outbound.action property for an individual Firewall Rule.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The status of the firewall.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_image":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"When this Image was created.","description_kind":"plain","computed":true},"created_by":{"type":"string","description":"The name of the User who created this Image.","description_kind":"plain","computed":true},"deprecated":{"type":"bool","description":"Whether or not this Image is deprecated. Will only be True for deprecated public Images.","description_kind":"plain","computed":true},"description":{"type":"string","description":"A detailed description of this Image.","description_kind":"plain","computed":true},"expiry":{"type":"string","description":"Only Images created automatically (from a deleted Linode; type=automatic) will expire.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The unique ID assigned to this Image.","description_kind":"plain","required":true},"is_public":{"type":"bool","description":"True if the Image is public.","description_kind":"plain","computed":true},"label":{"type":"string","description":"A short description of the Image. Labels cannot contain special characters.","description_kind":"plain","computed":true},"size":{"type":"number","description":"The minimum size this Image needs to deploy. Size is in MB.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The current status of this Image.","description_kind":"plain","computed":true},"type":{"type":"string","description":"How the Image was created. 'Manual' Images can be created at any time. 'Automatic' images are created automatically from a deleted Linode.","description_kind":"plain","computed":true},"vendor":{"type":"string","description":"The upstream distribution vendor. Nil for private Images.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_images":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"images":{"type":["list",["object",{"created":"string","created_by":"string","deprecated":"bool","description":"string","expiry":"string","id":"string","is_public":"bool","label":"string","size":"number","status":"string","type":"string","vendor":"string"}]],"description":"The returned list of Images.","description_kind":"plain","computed":true},"latest":{"type":"bool","description":"If true, only the latest image will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_instance_backups":{"version":0,"block":{"attributes":{"automatic":{"type":["list",["object",{"available":"bool","configs":["list","string"],"created":"string","disks":["list",["object",{"filesystem":"string","label":"string","size":"number"}]],"finished":"string","id":"number","label":"string","status":"string","type":"string","updated":"string"}]],"description":"A list of backups or snapshots for a Linode.","description_kind":"plain","computed":true},"current":{"type":["list",["object",{"available":"bool","configs":["list","string"],"created":"string","disks":["list",["object",{"filesystem":"string","label":"string","size":"number"}]],"finished":"string","id":"number","label":"string","status":"string","type":"string","updated":"string"}]],"description":"The current Backup for a Linode.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"in_progress":{"type":["list",["object",{"available":"bool","configs":["list","string"],"created":"string","disks":["list",["object",{"filesystem":"string","label":"string","size":"number"}]],"finished":"string","id":"number","label":"string","status":"string","type":"string","updated":"string"}]],"description":"The in-progress Backup for a Linode","description_kind":"plain","computed":true},"linode_id":{"type":"number","description":"The ID of the Linode to get backups for.","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_instance_networking":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipv4":{"type":["list",["object",{"private":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]],"public":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]],"reserved":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]],"shared":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]]}]],"description":"Information about this Linode’s IPv4 addresses.","description_kind":"plain","computed":true},"ipv6":{"type":["list",["object",{"global":["list",["object",{"prefix":"number","range":"string","region":"string","route_target":"string"}]],"link_local":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]],"slaac":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]]}]],"description":"Information about this Linode’s IPv6 addresses.","description_kind":"plain","computed":true},"linode_id":{"type":"number","description":"The ID of the Linode for network info.","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_instance_type":{"version":0,"block":{"attributes":{"addons":{"type":["list",["object",{"backups":["list",["object",{"price":["list",["object",{"hourly":"number","monthly":"number"}]]}]]}]],"description_kind":"plain","computed":true},"class":{"type":"string","description":"The class of the Linode Type. There are currently three classes of Linodes: nanode, standard, highmem, dedicated","description_kind":"plain","computed":true},"disk":{"type":"number","description":"The Disk size, in MB, of the Linode Type.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The unique ID assigned to this Instance type.","description_kind":"plain","required":true},"label":{"type":"string","description":"The Linode Type's label is for display purposes only.","description_kind":"plain","optional":true,"computed":true},"memory":{"type":"number","description":"Amount of RAM included in this Linode Type.","description_kind":"plain","computed":true},"network_out":{"type":"number","description":"The Mbits outbound bandwidth allocation.","description_kind":"plain","computed":true},"price":{"type":["list",["object",{"hourly":"number","monthly":"number"}]],"description":"Cost in US dollars, broken down into hourly and monthly charges.","description_kind":"plain","computed":true},"transfer":{"type":"number","description":"The monthly outbound transfer amount, in MB.","description_kind":"plain","computed":true},"vcpus":{"type":"number","description":"The number of VCPU cores this Linode Type offers.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_instance_types":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true},"types":{"type":["list",["object",{"addons":["list",["object",{"backups":["list",["object",{"price":["list",["object",{"hourly":"number","monthly":"number"}]]}]]}]],"class":"string","disk":"number","id":"string","label":"string","memory":"number","network_out":"number","price":["list",["object",{"hourly":"number","monthly":"number"}]],"transfer":"number","vcpus":"number"}]],"description":"The returned list of Types.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_instances":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"instances":{"type":["list",["object",{"alerts":["list",["object",{"cpu":"number","io":"number","network_in":"number","network_out":"number","transfer_quota":"number"}]],"backups":["list",["object",{"available":"bool","enabled":"bool","schedule":["list",["object",{"day":"string","window":"string"}]]}]],"boot_config_label":"string","config":["list",["object",{"comments":"string","devices":["list",["object",{"sda":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdb":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdc":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdd":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sde":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdf":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdg":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdh":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]]}]],"helpers":["list",["object",{"devtmpfs_automount":"bool","distro":"bool","modules_dep":"bool","network":"bool","updatedb_disabled":"bool"}]],"interface":["list",["object",{"ipam_address":"string","label":"string","purpose":"string"}]],"kernel":"string","label":"string","memory_limit":"number","root_device":"string","run_level":"string","virt_mode":"string"}]],"disk":["list",["object",{"filesystem":"string","id":"number","label":"string","size":"number"}]],"group":"string","host_uuid":"string","id":"number","image":"string","ip_address":"string","ipv4":["set","string"],"ipv6":"string","label":"string","private_ip_address":"string","region":"string","specs":["list",["object",{"disk":"number","memory":"number","transfer":"number","vcpus":"number"}]],"status":"string","swap_size":"number","tags":["set","string"],"type":"string","watchdog_enabled":"bool"}]],"description":"The returned list of Instances.","description_kind":"plain","computed":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_ipv6_range":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_bgp":{"type":"bool","description":"Whether this IPv6 range is shared.","description_kind":"plain","computed":true},"linodes":{"type":["set","number"],"description":"A list of Linodes targeted by this IPv6 range. Includes Linodes with IP sharing.","description_kind":"plain","computed":true},"prefix":{"type":"number","description":"The prefix length of the address, denoting how many addresses can be assigned from this range.","description_kind":"plain","computed":true},"range":{"type":"string","description":"The IPv6 range to retrieve information about.","description_kind":"plain","required":true},"region":{"type":"string","description":"The region for this range of IPv6 addresses.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_kernel":{"version":0,"block":{"attributes":{"architecture":{"type":"string","description":"The architecture of this Kernel.","description_kind":"plain","computed":true},"deprecated":{"type":"bool","description":"Whether or not this Kernel is deprecated.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The unique ID of this Kernel.","description_kind":"plain","required":true},"kvm":{"type":"bool","description":"If this Kernel is suitable for KVM Linodes.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The friendly name of this Kernel.","description_kind":"plain","computed":true},"pvops":{"type":"bool","description":"If this Kernel is suitable for paravirtualized operations.","description_kind":"plain","computed":true},"version":{"type":"string","description":"Linux Kernel version.","description_kind":"plain","computed":true},"xen":{"type":"bool","description":"If this Kernel is suitable for Xen Linodes.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_lke_cluster":{"version":0,"block":{"attributes":{"api_endpoints":{"type":["list","string"],"description":"The API endpoints for the cluster.","description_kind":"plain","computed":true},"control_plane":{"type":["list",["object",{"high_availability":"bool"}]],"description":"Defines settings for the Kubernetes Control Plane.","description_kind":"plain","computed":true},"dashboard_url":{"type":"string","description":"The dashboard URL of the cluster.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID of this LKE Cluster.","description_kind":"plain","required":true},"k8s_version":{"type":"string","description":"The desired Kubernetes version for this Kubernetes cluster in the format of \u003cmajor\u003e.\u003cminor\u003e. The latest supported patch version will be deployed.","description_kind":"plain","computed":true},"kubeconfig":{"type":"string","description":"The Base64-encoded Kubeconfig for the cluster.","description_kind":"plain","computed":true,"sensitive":true},"label":{"type":"string","description":"The unique label for the cluster.","description_kind":"plain","computed":true},"pools":{"type":["list",["object",{"autoscaler":["list",["object",{"max":"number","min":"number"}]],"count":"number","id":"number","nodes":["list",["object",{"id":"string","instance_id":"number","status":"string"}]],"type":"string"}]],"description":"A node pool in the cluster.","description_kind":"plain","computed":true},"region":{"type":"string","description":"This cluster's location.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The status of the cluster.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_lke_versions":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"versions":{"type":["list",["object",{"id":"string"}]],"description":"The Kubernetes version numbers available for deployment to a Kubernetes cluster.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_networking_ip":{"version":0,"block":{"attributes":{"address":{"type":"string","description":"The IP address.","description_kind":"plain","required":true},"gateway":{"type":"string","description":"The default gateway for this address.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"linode_id":{"type":"number","description":"The ID of the Linode this address currently belongs to.","description_kind":"plain","computed":true},"prefix":{"type":"number","description":"The number of bits set in the subnet mask.","description_kind":"plain","computed":true},"public":{"type":"bool","description":"Whether this is a public or private IP address.","description_kind":"plain","computed":true},"rdns":{"type":"string","description":"The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The Region this IP address resides in.","description_kind":"plain","computed":true},"subnet_mask":{"type":"string","description":"The mask that separates host bits from network bits for this address.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The type of address this is (ipv4, ipv6, ipv6/pool, ipv6/range).","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_nodebalancer":{"version":1,"block":{"attributes":{"client_conn_throttle":{"type":"number","description":"Throttle connections per second (0-20). Set to 0 (zero) to disable throttling.","description_kind":"plain","computed":true},"created":{"type":"string","description":"When this NodeBalancer was created.","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"This NodeBalancer's hostname, ending with .nodebalancer.linode.com","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID of the Linode NodeBalancer.","description_kind":"plain","required":true},"ipv4":{"type":"string","description":"The Public IPv4 Address of this NodeBalancer","description_kind":"plain","computed":true},"ipv6":{"type":"string","description":"The Public IPv6 Address of this NodeBalancer","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of the Linode NodeBalancer.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region where this NodeBalancer will be deployed.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","computed":true},"transfer":{"type":["list",["object",{"in":"number","out":"number","total":"number"}]],"description":"Information about the amount of transfer this NodeBalancer has had so far this month.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this NodeBalancer was last updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_nodebalancer_config":{"version":1,"block":{"attributes":{"algorithm":{"type":"string","description":"What algorithm this NodeBalancer should use for routing traffic to backends: roundrobin, leastconn, source","description_kind":"plain","computed":true},"check":{"type":"string","description":"The type of check to perform against backends to ensure they are serving requests. This is used to determine if backends are up or down. If none no check is performed. connection requires only a connection to the backend to succeed. http and http_body rely on the backend serving HTTP, and that the response returned matches what is expected.","description_kind":"plain","computed":true},"check_attempts":{"type":"number","description":"How many times to attempt a check before considering a backend to be down. (1-30)","description_kind":"plain","computed":true},"check_body":{"type":"string","description":"This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down","description_kind":"plain","computed":true},"check_interval":{"type":"number","description":"How often, in seconds, to check that backends are up and serving requests.","description_kind":"plain","computed":true},"check_passive":{"type":"bool","description":"If true, any response from this backend with a 5xx status code will be enough for it to be considered unhealthy and taken out of rotation.","description_kind":"plain","computed":true},"check_path":{"type":"string","description":"The URL path to check on each backend. If the backend does not respond to this request it is considered to be down.","description_kind":"plain","computed":true},"check_timeout":{"type":"number","description":"How long, in seconds, to wait for a check attempt before considering it failed. (1-30)","description_kind":"plain","computed":true},"cipher_suite":{"type":"string","description":"What ciphers to use for SSL connections served by this NodeBalancer. `legacy` is considered insecure and should only be used if necessary.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The ID of the NodeBalancer config.","description_kind":"plain","required":true},"node_status":{"type":["list",["object",{"down":"number","up":"number"}]],"description":"A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends.","description_kind":"plain","computed":true},"nodebalancer_id":{"type":"number","description":"The ID of the NodeBalancer to access.","description_kind":"plain","required":true},"port":{"type":"number","description":"The TCP port this Config is for. These values must be unique across configs on a single NodeBalancer (you can't have two configs for port 80, for example). While some ports imply some protocols, no enforcement is done and you may configure your NodeBalancer however is useful to you. For example, while port 443 is generally used for HTTPS, you do not need SSL configured to have a NodeBalancer listening on port 443.","description_kind":"plain","computed":true},"protocol":{"type":"string","description":"The protocol this port is configured to serve. If this is set to https you must include an ssl_cert and an ssl_key.","description_kind":"plain","computed":true},"proxy_protocol":{"type":"string","description":"The version of ProxyProtocol to use for the underlying NodeBalancer. This requires protocol to be `tcp`. Valid values are `none`, `v1`, and `v2`.","description_kind":"plain","computed":true},"ssl_commonname":{"type":"string","description":"The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.","description_kind":"plain","computed":true},"ssl_fingerprint":{"type":"string","description":"The read-only fingerprint automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.","description_kind":"plain","computed":true},"stickiness":{"type":"string","description":"Controls how session stickiness is handled on this port: 'none', 'table', 'http_cookie'","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_nodebalancer_node":{"version":0,"block":{"attributes":{"address":{"type":"string","description":"The private IP Address and port (IP:PORT) where this backend can be reached. This must be a private IP address.","description_kind":"plain","computed":true},"config_id":{"type":"number","description":"The ID of the NodeBalancerConfig to access.","description_kind":"plain","required":true},"id":{"type":"number","description":"The ID of the NodeBalancer node.","description_kind":"plain","required":true},"label":{"type":"string","description":"The label for this node. This is for display purposes only.","description_kind":"plain","computed":true},"mode":{"type":"string","description":"The mode this NodeBalancer should use when sending traffic to this backend. If set to `accept` this backend is accepting traffic. If set to `reject` this backend will not receive traffic. If set to `drain` this backend will not receive new traffic, but connections already pinned to it will continue to be routed to it. If set to `backup` this backend will only accept traffic if all other nodes are down.","description_kind":"plain","computed":true},"nodebalancer_id":{"type":"number","description":"The ID of the NodeBalancer to access.","description_kind":"plain","required":true},"status":{"type":"string","description":"The current status of this node, based on the configured checks of its NodeBalancer Config. (unknown, UP, DOWN)","description_kind":"plain","computed":true},"weight":{"type":"number","description":"Used when picking a backend to serve a request and is not pinned to a single backend yet. Nodes with a higher weight will receive more traffic. (1-255)","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_object_storage_cluster":{"version":0,"block":{"attributes":{"domain":{"type":"string","description":"The base URL for this cluster.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The unique ID of this Cluster.","description_kind":"plain","required":true},"region":{"type":"string","description":"The region this cluster is located in.","description_kind":"plain","optional":true,"computed":true},"static_site_domain":{"type":"string","description":"The base URL for this cluster used when hosting static sites.","description_kind":"plain","optional":true,"computed":true},"status":{"type":"string","description":"This cluster's status.","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"linode_profile":{"version":0,"block":{"attributes":{"authorized_keys":{"type":["list","string"],"description":"The list of SSH Keys authorized to use Lish for this user. This value is ignored if lish_auth_method is 'disabled'.","description_kind":"plain","computed":true},"email":{"type":"string","description":"The profile email address. This address will be used for communication with Linode as necessary.","description_kind":"plain","computed":true},"email_notifications":{"type":"bool","description":"If true, email notifications will be sent about account activity. If false, when false business-critical communications may still be sent through email.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_whitelist_enabled":{"type":"bool","description":"If true, logins for the user will only be allowed from whitelisted IPs. This setting is currently deprecated, and cannot be enabled.","description_kind":"plain","computed":true},"lish_auth_method":{"type":"string","description":"The methods of authentication allowed when connecting via Lish. 'keys_only' is the most secure with the intent to use Lish, and 'disabled' is recommended for users that will not use Lish at all.","description_kind":"plain","computed":true},"referrals":{"type":["list",["object",{"code":"string","completed":"number","credit":"number","pending":"number","total":"number","url":"string"}]],"description":"Credit Card information associated with this Account.","description_kind":"plain","computed":true},"restricted":{"type":"bool","description":"If true, the user has restrictions on what can be accessed on the Account.","description_kind":"plain","computed":true},"timezone":{"type":"string","description":"The profile's preferred timezone. This is not used by the API, and is for the benefit of clients only. All times the API returns are in UTC.","description_kind":"plain","computed":true},"two_factor_auth":{"type":"bool","description":"If true, logins from untrusted computers will require Two Factor Authentication.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The username for logging in to Linode services.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_region":{"version":0,"block":{"attributes":{"country":{"type":"string","description":"The country where this Region resides.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The unique ID of this Region.","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_sshkey":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date this key was added.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label of the Linode SSH Key.","description_kind":"plain","required":true},"ssh_key":{"type":"string","description":"The public SSH Key, which is used to authenticate to the root user of the Linodes you deploy.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_stackscript":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date this StackScript was created.","description_kind":"plain","computed":true},"deployments_active":{"type":"number","description":"Count of currently active, deployed Linodes created from this StackScript.","description_kind":"plain","computed":true},"deployments_total":{"type":"number","description":"The total number of times this StackScript has been deployed.","description_kind":"plain","computed":true},"description":{"type":"string","description":"A description for the StackScript.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID of this Stackscript.","description_kind":"plain","required":true},"images":{"type":["list","string"],"description":"An array of Image IDs representing the Images that this StackScript is compatible for deploying with.","description_kind":"plain","computed":true},"is_public":{"type":"bool","description":"This determines whether other users can use your StackScript. Once a StackScript is made public, it cannot be made private.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The StackScript's label is for display purposes only.","description_kind":"plain","computed":true},"rev_note":{"type":"string","description":"This field allows you to add notes for the set of revisions made to this StackScript.","description_kind":"plain","computed":true},"script":{"type":"string","description":"The script to execute when provisioning a new Linode with this StackScript.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"The date this StackScript was updated.","description_kind":"plain","computed":true},"user_defined_fields":{"type":["list",["object",{"default":"string","example":"string","label":"string","many_of":"string","name":"string","one_of":"string"}]],"description":"This is a list of fields defined with a special syntax inside this StackScript that allow for supplying customized parameters during deployment.","description_kind":"plain","optional":true,"computed":true},"user_gravatar_id":{"type":"string","description":"The Gravatar ID for the User who created the StackScript.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The User who created the StackScript.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_stackscripts":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"latest":{"type":"bool","description":"If true, only the latest StackScript will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true},"stackscripts":{"type":["list",["object",{"created":"string","deployments_active":"number","deployments_total":"number","description":"string","id":"number","images":["list","string"],"is_public":"bool","label":"string","rev_note":"string","script":"string","updated":"string","user_defined_fields":["list",["object",{"default":"string","example":"string","label":"string","many_of":"string","name":"string","one_of":"string"}]],"user_gravatar_id":"string","username":"string"}]],"description":"The returned list of StackScripts.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email address for this User, for account management communications, and may be used for other communications as configured.","description_kind":"plain","computed":true},"global_grants":{"type":["list",["object",{"account_access":"string","add_databases":"bool","add_domains":"bool","add_firewalls":"bool","add_images":"bool","add_linodes":"bool","add_longview":"bool","add_nodebalancers":"bool","add_stackscripts":"bool","add_volumes":"bool","cancel_account":"bool","longview_subscription":"bool"}]],"description":"A structure containing the Account-level grants a User has.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"restricted":{"type":"bool","description":"If true, this User must be granted access to perform actions or access entities on this Account.","description_kind":"plain","computed":true},"ssh_keys":{"type":["list","string"],"description":"A list of SSH Key labels added by this User. These are the keys that will be deployed if this User is included in the authorized_users field of a create Linode, rebuild Linode, or create Disk request.","description_kind":"plain","computed":true},"username":{"type":"string","description":"This User's username. This is used for logging in, and may also be displayed alongside actions the User performs (for example, in Events or public StackScripts).","description_kind":"plain","required":true}},"block_types":{"domain_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"firewall_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"image_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"linode_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"longview_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"nodebalancer_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"stackscript_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"volume_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_vlans":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true},"vlans":{"type":["list",["object",{"created":"string","label":"string","linodes":["list","number"],"region":"string"}]],"description":"The returned list of VLANs.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_volume":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"Datetime string representing when the Volume was created.","description_kind":"plain","computed":true},"filesystem_path":{"type":"string","description":"The full filesystem path for the Volume based on the Volume's label. Path is /dev/disk/by-id/scsi-0LinodeVolume + Volume label.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique id of this Volume.","description_kind":"plain","required":true},"label":{"type":"string","description":"The Volume's label. For display purposes only.","description_kind":"plain","computed":true},"linode_id":{"type":"number","description":"If a Volume is attached to a specific Linode, the ID of that Linode will be displayed here.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The datacenter where this Volume is located.","description_kind":"plain","computed":true},"size":{"type":"number","description":"The size of this Volume in GiB.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The status of the Volume. Can be one of active | creating | resizing | contact_support","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this Volume. Tags are for organizational purposes only.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"Datetime string representing when the Volume was last updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}}}}}} +{"format_version":"1.0","provider_schemas":{"registry.terraform.io/linode/linode":{"provider":{"version":0,"block":{"attributes":{"api_version":{"type":"string","description":"The version of Linode API.","description_kind":"plain","optional":true},"config_path":{"type":"string","description_kind":"plain","optional":true},"config_profile":{"type":"string","description_kind":"plain","optional":true},"disable_internal_cache":{"type":"bool","description":"Disable the internal caching system that backs certain Linode API requests.","description_kind":"plain","optional":true},"event_poll_ms":{"type":"number","description":"The rate in milliseconds to poll for events.","description_kind":"plain","optional":true},"lke_event_poll_ms":{"type":"number","description":"The rate in milliseconds to poll for LKE events.","description_kind":"plain","optional":true},"lke_node_ready_poll_ms":{"type":"number","description":"The rate in milliseconds to poll for an LKE node to be ready.","description_kind":"plain","optional":true},"max_retry_delay_ms":{"type":"number","description":"Maximum delay in milliseconds before retrying a request.","description_kind":"plain","optional":true},"min_retry_delay_ms":{"type":"number","description":"Minimum delay in milliseconds before retrying a request.","description_kind":"plain","optional":true},"skip_instance_delete_poll":{"type":"bool","description":"Skip waiting for a linode_instance resource to finish deleting.","description_kind":"plain","optional":true},"skip_instance_ready_poll":{"type":"bool","description":"Skip waiting for a linode_instance resource to be running.","description_kind":"plain","optional":true},"token":{"type":"string","description":"The token that allows you access to your Linode account","description_kind":"plain","optional":true},"ua_prefix":{"type":"string","description":"An HTTP User-Agent Prefix to prepend in API requests.","description_kind":"plain","optional":true},"url":{"type":"string","description":"The HTTP(S) API address of the Linode API to use.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"resource_schemas":{"linode_account_settings":{"version":0,"block":{"attributes":{"backups_enabled":{"type":"bool","description":"Account-wide backups default.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"longview_subscription":{"type":"string","description":"The Longview Pro tier you are currently subscribed to.","description_kind":"plain","optional":true,"computed":true},"managed":{"type":"bool","description":"Enables monitoring for connectivity, response, and total request time.","description_kind":"plain","computed":true},"network_helper":{"type":"bool","description":"Enables network helper across all users by default for new Linodes and Linode Configs.","description_kind":"plain","optional":true,"computed":true},"object_storage":{"type":"string","description":"A string describing the status of this account's Object Storage service enrollment.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_database_access_controls":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","required":true},"database_id":{"type":"number","description":"The ID of the database to manage the allow list for.","description_kind":"plain","required":true},"database_type":{"type":"string","description":"The type of the database to manage the allow list for.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"linode_database_mongodb":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","optional":true,"computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","optional":true},"compression_type":{"type":"string","description":"The type of data compression for this Database.","description_kind":"plain","optional":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","optional":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. mongodb/4.4.10)","description_kind":"plain","required":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","required":true},"peers":{"type":["set","string"],"description":"A set of peer addresses for this Database.","description_kind":"plain","computed":true},"port":{"type":"number","description":"The access port for this Managed Database.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","required":true},"replica_set":{"type":"string","description":"Label for configuring a MongoDB replica set. Choose the same label on multiple Databases to include them in the same replica set.","description_kind":"plain","computed":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","optional":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"storage_engine":{"type":"string","description":"The type of storage engine for this Database.","description_kind":"plain","optional":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","required":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","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"}},"updates":{"nesting_mode":"list","block":{"attributes":{"day_of_week":{"type":"string","description":"The day to perform maintenance.","description_kind":"plain","required":true},"duration":{"type":"number","description":"The maximum maintenance window time in hours.","description_kind":"plain","required":true},"frequency":{"type":"string","description":"Whether maintenance occurs on a weekly or monthly basis.","description_kind":"plain","required":true},"hour_of_day":{"type":"number","description":"The hour to begin maintenance based in UTC time.","description_kind":"plain","required":true},"week_of_month":{"type":"number","description":"The week of the month to perform monthly frequency updates. Required for monthly frequency updates.","description_kind":"plain","optional":true}},"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"linode_database_mysql":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","optional":true,"computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","optional":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","optional":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. mysql/8.0.26)","description_kind":"plain","required":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","required":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","required":true},"replication_type":{"type":"string","description":"The replication method used for the Managed Database.","description_kind":"plain","optional":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","optional":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","required":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","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"}},"updates":{"nesting_mode":"list","block":{"attributes":{"day_of_week":{"type":"string","description":"The day to perform maintenance.","description_kind":"plain","required":true},"duration":{"type":"number","description":"The maximum maintenance window time in hours.","description_kind":"plain","required":true},"frequency":{"type":"string","description":"Whether maintenance occurs on a weekly or monthly basis.","description_kind":"plain","required":true},"hour_of_day":{"type":"number","description":"The hour to begin maintenance based in UTC time.","description_kind":"plain","required":true},"week_of_month":{"type":"number","description":"The week of the month to perform monthly frequency updates. Required for monthly frequency updates.","description_kind":"plain","optional":true}},"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"linode_database_postgresql":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","optional":true,"computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","optional":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","optional":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. mongodb/4.4.10)","description_kind":"plain","required":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","required":true},"port":{"type":"number","description":"The access port for this Managed Database.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","required":true},"replication_commit_type":{"type":"string","description":"The synchronization level of the replicating server.Must be `local` or `off` for the `asynch` replication type. Must be `on`, `remote_write`, or `remote_apply` for the `semi_synch` replication type.","description_kind":"plain","optional":true},"replication_type":{"type":"string","description":"The replication method used for the Managed Database. Must be `none` for a single node cluster. Must be `asynch` or `semi_synch` for a high availability cluster.","description_kind":"plain","optional":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","optional":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","required":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","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"}},"updates":{"nesting_mode":"list","block":{"attributes":{"day_of_week":{"type":"string","description":"The day to perform maintenance.","description_kind":"plain","required":true},"duration":{"type":"number","description":"The maximum maintenance window time in hours.","description_kind":"plain","required":true},"frequency":{"type":"string","description":"Whether maintenance occurs on a weekly or monthly basis.","description_kind":"plain","required":true},"hour_of_day":{"type":"number","description":"The hour to begin maintenance based in UTC time.","description_kind":"plain","required":true},"week_of_month":{"type":"number","description":"The week of the month to perform monthly frequency updates. Required for monthly frequency updates.","description_kind":"plain","optional":true}},"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"linode_domain":{"version":0,"block":{"attributes":{"axfr_ips":{"type":["set","string"],"description":"The list of IPs that may perform a zone transfer for this Domain. This is potentially dangerous, and should be set to an empty list unless you intend to use it.","description_kind":"plain","optional":true},"description":{"type":"string","description":"A description for this Domain. This is for display purposes only.","description_kind":"plain","optional":true},"domain":{"type":"string","description":"The domain this Domain represents. These must be unique in our system; you cannot have two Domains representing the same domain.","description_kind":"plain","required":true},"expire_sec":{"type":"number","description":"The amount of time in seconds that may pass before this Domain is no longer Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","optional":true},"group":{"type":"string","description":"The group this Domain belongs to. This is for display purposes only.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"master_ips":{"type":["set","string"],"description":"The IP addresses representing the master DNS for this Domain.","description_kind":"plain","optional":true},"refresh_sec":{"type":"number","description":"The amount of time in seconds before this Domain should be refreshed. Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","optional":true},"retry_sec":{"type":"number","description":"The interval, in seconds, at which a failed refresh should be retried. Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","optional":true},"soa_email":{"type":"string","description":"Start of Authority email address. This is required for master Domains.","description_kind":"plain","optional":true},"status":{"type":"string","description":"Used to control whether this Domain is currently being rendered.","description_kind":"plain","optional":true,"computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","optional":true},"ttl_sec":{"type":"number","description":"'Time to Live' - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 0, 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","optional":true},"type":{"type":"string","description":"If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave).","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_domain_record":{"version":0,"block":{"attributes":{"domain_id":{"type":"number","description":"The ID of the Domain to access.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of this Record. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the subdomain being associated with an IP address. Generated for SRV records.","description_kind":"plain","optional":true,"computed":true},"port":{"type":"number","description":"The port this Record points to.","description_kind":"plain","optional":true},"priority":{"type":"number","description":"The priority of the target host. Lower values are preferred.","description_kind":"plain","optional":true},"protocol":{"type":"string","description":"The protocol this Record's service communicates with. Only valid for SRV records.","description_kind":"plain","optional":true},"record_type":{"type":"string","description":"The type of Record this is in the DNS system. For example, A records associate a domain name with an IPv4 address, and AAAA records associate a domain name with an IPv6 address.","description_kind":"plain","required":true},"service":{"type":"string","description":"The service this Record identified. Only valid for SRV records.","description_kind":"plain","optional":true},"tag":{"type":"string","description":"The tag portion of a CAA record. It is invalid to set this on other record types.","description_kind":"plain","optional":true},"target":{"type":"string","description":"The target for this Record. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the address the named Domain should resolve to.","description_kind":"plain","required":true},"ttl_sec":{"type":"number","description":"'Time to Live' - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","optional":true},"weight":{"type":"number","description":"The relative weight of this Record. Higher values are preferred.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"linode_firewall":{"version":0,"block":{"attributes":{"devices":{"type":["list",["object",{"entity_id":"number","id":"number","label":"string","type":"string","url":"string"}]],"description":"The devices associated with this firewall.","description_kind":"plain","computed":true},"disabled":{"type":"bool","description":"If true, the Firewall is inactive.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"inbound_policy":{"type":"string","description":"The default behavior for inbound traffic. This setting can be overridden by updating the inbound.action property for an individual Firewall Rule.","description_kind":"plain","required":true},"label":{"type":"string","description":"The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.","description_kind":"plain","required":true},"linodes":{"type":["set","number"],"description":"The IDs of Linodes to apply this firewall to.","description_kind":"plain","optional":true,"computed":true},"outbound_policy":{"type":"string","description":"The default behavior for outbound traffic. This setting can be overridden by updating the outbound.action property for an individual Firewall Rule.","description_kind":"plain","required":true},"status":{"type":"string","description":"The status of the firewall.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","optional":true}},"block_types":{"inbound":{"nesting_mode":"list","block":{"attributes":{"action":{"type":"string","description":"Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.","description_kind":"plain","required":true},"ipv4":{"type":["list","string"],"description":"A list of IP addresses, CIDR blocks, or 0.0.0.0/0 (to allow all) this rule applies to.","description_kind":"plain","optional":true},"ipv6":{"type":["list","string"],"description":"A list of IPv6 addresses or networks this rule applies to.","description_kind":"plain","optional":true},"label":{"type":"string","description":"Used to identify this rule. For display purposes only.","description_kind":"plain","required":true},"ports":{"type":"string","description":"A string representation of ports and/or port ranges (i.e. \"443\" or \"80-90, 91\").","description_kind":"plain","optional":true},"protocol":{"type":"string","description":"The network protocol this rule controls.","description_kind":"plain","required":true}},"description":"A firewall rule that specifies what inbound network traffic is allowed.","description_kind":"plain"}},"outbound":{"nesting_mode":"list","block":{"attributes":{"action":{"type":"string","description":"Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall’s inbound_policy if this is an inbound rule, or the outbound_policy if this is an outbound rule.","description_kind":"plain","required":true},"ipv4":{"type":["list","string"],"description":"A list of IP addresses, CIDR blocks, or 0.0.0.0/0 (to allow all) this rule applies to.","description_kind":"plain","optional":true},"ipv6":{"type":["list","string"],"description":"A list of IPv6 addresses or networks this rule applies to.","description_kind":"plain","optional":true},"label":{"type":"string","description":"Used to identify this rule. For display purposes only.","description_kind":"plain","required":true},"ports":{"type":"string","description":"A string representation of ports and/or port ranges (i.e. \"443\" or \"80-90, 91\").","description_kind":"plain","optional":true},"protocol":{"type":"string","description":"The network protocol this rule controls.","description_kind":"plain","required":true}},"description":"A firewall rule that specifies what outbound network traffic is allowed.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_firewall_device":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"When this Firewall Device was created.","description_kind":"plain","computed":true},"entity_id":{"type":"number","description":"The ID of the entity to create a Firewall device for.","description_kind":"plain","required":true},"entity_type":{"type":"string","description":"The type of the entity to create a Firewall device for.","description_kind":"plain","optional":true},"firewall_id":{"type":"number","description":"The ID of the Firewall to access.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"updated":{"type":"string","description":"When this Firewall Device was updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_image":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"When this Image was created.","description_kind":"plain","computed":true},"created_by":{"type":"string","description":"The name of the User who created this Image.","description_kind":"plain","computed":true},"deprecated":{"type":"bool","description":"Whether or not this Image is deprecated. Will only be True for deprecated public Images.","description_kind":"plain","computed":true},"description":{"type":"string","description":"A detailed description of this Image.","description_kind":"plain","optional":true},"disk_id":{"type":"number","description":"The ID of the Linode Disk that this Image will be created from.","description_kind":"plain","optional":true},"expiry":{"type":"string","description":"Only Images created automatically (from a deleted Linode; type=automatic) will expire.","description_kind":"plain","computed":true},"file_hash":{"type":"string","description":"The MD5 hash of the image file.","description_kind":"plain","optional":true,"computed":true},"file_path":{"type":"string","description":"The name of the file to upload to this image.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_public":{"type":"bool","description":"True if the Image is public.","description_kind":"plain","computed":true},"label":{"type":"string","description":"A short description of the Image. Labels cannot contain special characters.","description_kind":"plain","required":true},"linode_id":{"type":"number","description":"The ID of the Linode that this Image will be created from.","description_kind":"plain","optional":true},"region":{"type":"string","description":"The region to upload to.","description_kind":"plain","optional":true},"size":{"type":"number","description":"The minimum size this Image needs to deploy. Size is in MB.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The current status of this Image.","description_kind":"plain","computed":true},"type":{"type":"string","description":"How the Image was created. 'Manual' Images can be created at any time. 'Automatic' images are created automatically from a deleted Linode.","description_kind":"plain","computed":true},"vendor":{"type":"string","description":"The upstream distribution vendor. Nil for private Images.","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_instance":{"version":0,"block":{"attributes":{"authorized_keys":{"type":["list","string"],"description":"A list of SSH public keys to deploy for the root user on the newly created Linode. Only accepted if 'image' is provided.","description_kind":"plain","optional":true},"authorized_users":{"type":["list","string"],"description":"A list of Linode usernames. If the usernames have associated SSH keys, the keys will be appended to the `root` user's `~/.ssh/authorized_keys` file automatically. Only accepted if 'image' is provided.","description_kind":"plain","optional":true},"backup_id":{"type":"number","description":"A Backup ID from another Linode's available backups. Your User must have read_write access to that Linode, the Backup must have a status of successful, and the Linode must be deployed to the same region as the Backup. See /linode/instances/{linodeId}/backups for a Linode's available backups. This field and the image field are mutually exclusive.","description_kind":"plain","optional":true},"backups":{"type":["list",["object",{"available":"bool","enabled":"bool","schedule":["list",["object",{"day":"string","window":"string"}]]}]],"description":"Information about this Linode's backups status.","description_kind":"plain","computed":true},"backups_enabled":{"type":"bool","description":"If this field is set to true, the created Linode will automatically be enrolled in the Linode Backup service. This will incur an additional charge. The cost for the Backup service is dependent on the Type of Linode deployed.","description_kind":"plain","optional":true,"computed":true},"boot_config_label":{"type":"string","description":"The Label of the Instance Config that should be used to boot the Linode instance.","description_kind":"plain","optional":true,"computed":true},"booted":{"type":"bool","description_kind":"plain","optional":true,"computed":true},"group":{"type":"string","description":"The display group of the Linode instance.","description_kind":"plain","optional":true},"host_uuid":{"type":"string","description":"The Linode’s host machine, as a UUID.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"image":{"type":"string","description":"An Image ID to deploy the Disk from. Official Linode Images start with linode/, while your Images start with private/. See /images for more information on the Images available for you to use.","description_kind":"plain","optional":true},"ip_address":{"type":"string","description":"This Linode's Public IPv4 Address. If there are multiple public IPv4 addresses on this Instance, an arbitrary address will be used for this field.","description_kind":"plain","computed":true},"ipv4":{"type":["set","string"],"description":"This Linode's IPv4 Addresses. Each Linode is assigned a single public IPv4 address upon creation, and may get a single private IPv4 address if needed. You may need to open a support ticket to get additional IPv4 addresses.","description_kind":"plain","computed":true},"ipv6":{"type":"string","description":"This Linode's IPv6 SLAAC addresses. This address is specific to a Linode, and may not be shared.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The Linode's label is for display purposes only. If no label is provided for a Linode, a default will be assigned","description_kind":"plain","optional":true,"computed":true},"private_ip":{"type":"bool","description":"If true, the created Linode will have private networking enabled, allowing use of the 192.168.128.0/17 network within the Linode's region.","description_kind":"plain","optional":true},"private_ip_address":{"type":"string","description":"This Linode's Private IPv4 Address. The regional private IP address range is 192.168.128/17 address shared by all Linode Instances in a region.","description_kind":"plain","computed":true},"region":{"type":"string","description":"This is the location where the Linode was deployed. This cannot be changed without opening a support ticket.","description_kind":"plain","required":true},"resize_disk":{"type":"bool","description":"If true, changes in Linode type will attempt to upsize or downsize implicitly created disks. This must be false if explicit disks are defined. This is an irreversible action as Linode disks cannot be automatically downsized.","description_kind":"plain","optional":true},"root_pass":{"type":"string","description":"The password that will be initialially assigned to the 'root' user account.","description_kind":"plain","optional":true,"sensitive":true},"shared_ipv4":{"type":["set","string"],"description":"A set of IPv4 addresses to share with this Linode.","description_kind":"plain","optional":true,"computed":true},"specs":{"type":["list",["object",{"disk":"number","memory":"number","transfer":"number","vcpus":"number"}]],"description":"Information about the resources available to this Linode.","description_kind":"plain","computed":true},"stackscript_data":{"type":["map","string"],"description":"An object containing responses to any User Defined Fields present in the StackScript being deployed to this Linode. Only accepted if 'stackscript_id' is given. The required values depend on the StackScript being deployed.","description_kind":"plain","optional":true,"sensitive":true},"stackscript_id":{"type":"number","description":"The StackScript to deploy to the newly created Linode. If provided, 'image' must also be provided, and must be an Image that is compatible with this StackScript.","description_kind":"plain","optional":true},"status":{"type":"string","description":"The status of the instance, indicating the current readiness state.","description_kind":"plain","computed":true},"swap_size":{"type":"number","description":"When deploying from an Image, this field is optional with a Linode API default of 512mb, otherwise it is ignored. This is used to set the swap disk size for the newly-created Linode.","description_kind":"plain","optional":true,"computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","optional":true},"type":{"type":"string","description":"The type of instance to be deployed, determining the price and size.","description_kind":"plain","optional":true},"watchdog_enabled":{"type":"bool","description":"The watchdog, named Lassie, is a Shutdown Watchdog that monitors your Linode and will reboot it if it powers off unexpectedly. It works by issuing a boot job when your Linode powers off without a shutdown job being responsible. To prevent a loop, Lassie will give up if there have been more than 5 boot jobs issued within 15 minutes.","description_kind":"plain","optional":true}},"block_types":{"alerts":{"nesting_mode":"list","block":{"attributes":{"cpu":{"type":"number","description":"The percentage of CPU usage required to trigger an alert. If the average CPU usage over two hours exceeds this value, we'll send you an alert. If this is set to 0, the alert is disabled.","description_kind":"plain","optional":true,"computed":true},"io":{"type":"number","description":"The amount of disk IO operation per second required to trigger an alert. If the average disk IO over two hours exceeds this value, we'll send you an alert. If set to 0, this alert is disabled.","description_kind":"plain","optional":true,"computed":true},"network_in":{"type":"number","description":"The amount of incoming traffic, in Mbit/s, required to trigger an alert. If the average incoming traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled.","description_kind":"plain","optional":true,"computed":true},"network_out":{"type":"number","description":"The amount of outbound traffic, in Mbit/s, required to trigger an alert. If the average outbound traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled.","description_kind":"plain","optional":true,"computed":true},"transfer_quota":{"type":"number","description":"The percentage of network transfer that may be used before an alert is triggered. When this value is exceeded, we'll alert you. If this is set to 0 (zero), the alert is disabled.","description_kind":"plain","optional":true,"computed":true}},"description":"Configuration options for alert triggers on this Linode.","description_kind":"plain"},"max_items":1},"config":{"nesting_mode":"list","block":{"attributes":{"comments":{"type":"string","description":"Optional field for arbitrary User comments on this Config.","description_kind":"plain","optional":true},"kernel":{"type":"string","description":"A Kernel ID to boot a Linode with. Default is based on image choice. (examples: linode/latest-64bit, linode/grub2, linode/direct-disk)","description_kind":"plain","optional":true},"label":{"type":"string","description":"The Config's label for display purposes. Also used by `boot_config_label`.","description_kind":"plain","required":true},"memory_limit":{"type":"number","description":"Defaults to the total RAM of the Linode","description_kind":"plain","optional":true},"root_device":{"type":"string","description":"The root device to boot. The corresponding disk must be attached.","description_kind":"plain","optional":true,"computed":true},"run_level":{"type":"string","description":"Defines the state of your Linode after booting. Defaults to default.","description_kind":"plain","optional":true},"virt_mode":{"type":"string","description":"Controls the virtualization mode. Defaults to paravirt.","description_kind":"plain","optional":true}},"block_types":{"devices":{"nesting_mode":"list","block":{"block_types":{"sda":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdb":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdc":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdd":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sde":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdf":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdg":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdh":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true,"computed":true},"disk_label":{"type":"string","description":"The `label` of the `disk` to map to this `device` slot.","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1}},"description":"Device sda-sdh can be either a Disk or Volume identified by disk_label or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"helpers":{"nesting_mode":"list","block":{"attributes":{"devtmpfs_automount":{"type":"bool","description":"Populates the /dev directory early during boot without udev. Defaults to false.","description_kind":"plain","optional":true},"distro":{"type":"bool","description":"Controls the behavior of the Linode Config's Distribution Helper setting.","description_kind":"plain","optional":true},"modules_dep":{"type":"bool","description":"Creates a modules dependency file for the Kernel you run.","description_kind":"plain","optional":true},"network":{"type":"bool","description":"Controls the behavior of the Linode Config's Network Helper setting, used to automatically configure additional IP addresses assigned to this instance.","description_kind":"plain","optional":true},"updatedb_disabled":{"type":"bool","description":"Disables updatedb cron job to avoid disk thrashing.","description_kind":"plain","optional":true}},"description":"Helpers enabled when booting to this Linode Config.","description_kind":"plain"},"max_items":1},"interface":{"nesting_mode":"list","block":{"attributes":{"ipam_address":{"type":"string","description":"The IPAM Address of this interface.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The unique label of this interface.","description_kind":"plain","optional":true},"purpose":{"type":"string","description":"The purpose of this interface.","description_kind":"plain","optional":true}},"description":"An array of Network Interfaces for this Linode’s Configuration Profile.","description_kind":"plain"}}},"description":"Configuration profiles define the VM settings and boot behavior of the Linode Instance.","description_kind":"plain"}},"disk":{"nesting_mode":"list","block":{"attributes":{"authorized_keys":{"type":["list","string"],"description":"A list of SSH public keys to deploy for the root user on the newly created Linode. Only accepted if 'image' is provided.","description_kind":"plain","optional":true},"authorized_users":{"type":["list","string"],"description":"A list of Linode usernames. If the usernames have associated SSH keys, the keys will be appended to the `root` user's `~/.ssh/authorized_keys` file automatically. Only accepted if 'image' is provided.","description_kind":"plain","optional":true},"filesystem":{"type":"string","description":"The Disk filesystem can be one of: raw, swap, ext3, ext4, initrd (max 32mb)","description_kind":"plain","optional":true,"computed":true},"id":{"type":"number","description":"The ID of the Disk (for use in Linode Image resources and Linode Instance Config Devices)","description_kind":"plain","computed":true},"image":{"type":"string","description":"An Image ID to deploy the Disk from. Official Linode Images start with linode/, while your Images start with private/.","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The disks label, which acts as an identifier in Terraform.","description_kind":"plain","required":true},"read_only":{"type":"bool","description":"If true, this Disk is read-only.","description_kind":"plain","optional":true,"computed":true},"root_pass":{"type":"string","description":"The password that will be initialially assigned to the 'root' user account.","description_kind":"plain","optional":true,"sensitive":true},"size":{"type":"number","description":"The size of the Disk in MB.","description_kind":"plain","required":true},"stackscript_data":{"type":["map","string"],"description":"An object containing responses to any User Defined Fields present in the StackScript being deployed to this Linode. Only accepted if 'stackscript_id' is given. The required values depend on the StackScript being deployed.","description_kind":"plain","optional":true,"computed":true,"sensitive":true},"stackscript_id":{"type":"number","description":"The StackScript to deploy to the newly created Linode. If provided, 'image' must also be provided, and must be an Image that is compatible with this StackScript.","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"interface":{"nesting_mode":"list","block":{"attributes":{"ipam_address":{"type":"string","description":"The IPAM Address of this interface.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The unique label of this interface.","description_kind":"plain","optional":true},"purpose":{"type":"string","description":"The purpose of this interface.","description_kind":"plain","optional":true}},"description":"An array of Network Interfaces for this Linode to be created with. If an explicit config or disk is defined, interfaces must be declared in the config block.","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"}},"linode_instance_config":{"version":0,"block":{"attributes":{"booted":{"type":"bool","description":"If true, the Linode will be booted to running state. If false, the Linode will be shutdown. If undefined, no action will be taken.","description_kind":"plain","optional":true,"computed":true},"comments":{"type":"string","description":"Optional field for arbitrary User comments on this Config.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kernel":{"type":"string","description":"A Kernel ID to boot a Linode with. Defaults to “linode/latest-64bit”.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The Config’s label for display purposes only.","description_kind":"plain","required":true},"linode_id":{"type":"number","description":"The ID of the Linode to create this configuration profile under.","description_kind":"plain","required":true},"memory_limit":{"type":"number","description":"The memory limit of the Linode.","description_kind":"plain","optional":true,"computed":true},"root_device":{"type":"string","description":"The root device to boot. If no value or an invalid value is provided, root device will default to /dev/sda. If the device specified at the root device location is not mounted, the Linode will not boot until a device is mounted.","description_kind":"plain","optional":true},"run_level":{"type":"string","description":"Defines the state of your Linode after booting.","description_kind":"plain","optional":true},"virt_mode":{"type":"string","description":"Controls the virtualization mode.","description_kind":"plain","optional":true}},"block_types":{"devices":{"nesting_mode":"list","block":{"block_types":{"sda":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdb":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdc":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdd":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sde":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdf":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdg":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1},"sdh":{"nesting_mode":"list","block":{"attributes":{"disk_id":{"type":"number","description":"The Disk ID to map to this disk slot","description_kind":"plain","optional":true},"volume_id":{"type":"number","description":"The Block Storage volume ID to map to this disk slot","description_kind":"plain","optional":true}},"description":"Device can be either a Disk or Volume identified by disk_id or volume_id. Only one type per slot allowed.","description_kind":"plain"},"max_items":1}},"description":"A dictionary of device disks to use as a device map in a Linode’s configuration profile.","description_kind":"plain"},"max_items":1},"helpers":{"nesting_mode":"list","block":{"attributes":{"devtmpfs_automount":{"type":"bool","description":"Populates the /dev directory early during boot without udev.","description_kind":"plain","optional":true},"distro":{"type":"bool","description":"Helps maintain correct inittab/upstart console device.","description_kind":"plain","optional":true},"modules_dep":{"type":"bool","description":"Creates a modules dependency file for the Kernel you run.","description_kind":"plain","optional":true},"network":{"type":"bool","description":"Automatically configures static networking.","description_kind":"plain","optional":true},"updatedb_disabled":{"type":"bool","description":"Disables updatedb cron job to avoid disk thrashing.","description_kind":"plain","optional":true}},"description":"Helpers enabled when booting to this Linode Config.","description_kind":"plain"}},"interface":{"nesting_mode":"list","block":{"attributes":{"ipam_address":{"type":"string","description":"This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The name of this interface.","description_kind":"plain","optional":true},"purpose":{"type":"string","description":"The type of interface.","description_kind":"plain","required":true}},"description":"An array of Network Interfaces to add to this Linode’s Configuration Profile.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_instance_disk":{"version":0,"block":{"attributes":{"authorized_keys":{"type":["set","string"],"description":"A list of public SSH keys that will be automatically appended to the root user’s ~/.ssh/authorized_keys file when deploying from an Image.","description_kind":"plain","optional":true},"authorized_users":{"type":["set","string"],"description":"A list of usernames. If the usernames have associated SSH keys, the keys will be appended to the root users ~/.ssh/authorized_keys file automatically when deploying from an Image.","description_kind":"plain","optional":true},"created":{"type":"string","description":"When this disk was created.","description_kind":"plain","computed":true},"filesystem":{"type":"string","description":"The filesystem of this disk.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"image":{"type":"string","description":"An Image ID to deploy the Linode Disk from.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The Disk’s label is for display purposes only.","description_kind":"plain","required":true},"linode_id":{"type":"number","description":"The ID of the Linode to assign this disk to.","description_kind":"plain","required":true},"root_pass":{"type":"string","description":"This sets the root user’s password on a newly-created Linode Disk when deploying from an Image.","description_kind":"plain","optional":true,"sensitive":true},"size":{"type":"number","description":"The size of the Disk in MB.","description_kind":"plain","required":true},"stackscript_data":{"type":["map","string"],"description":"An object containing responses to any User Defined Fields present in the StackScript being deployed to this Disk. Only accepted if 'stackscript_id' is given. The required values depend on the StackScript being deployed.","description_kind":"plain","optional":true,"sensitive":true},"stackscript_id":{"type":"number","description":"A StackScript ID that will cause the referenced StackScript to be run during deployment of this Linode.","description_kind":"plain","optional":true},"status":{"type":"string","description":"A brief description of this Disk's current state.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this disk was last updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_instance_ip":{"version":0,"block":{"attributes":{"address":{"type":"string","description":"The resulting IPv4 address.","description_kind":"plain","computed":true},"apply_immediately":{"type":"bool","description":"If true, the instance will be rebooted to update network interfaces.","description_kind":"plain","optional":true},"gateway":{"type":"string","description":"The default gateway for this address","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"linode_id":{"type":"number","description":"The ID of the Linode to allocate an IPv4 address for.","description_kind":"plain","required":true},"prefix":{"type":"number","description":"The number of bits set in the subnet mask.","description_kind":"plain","computed":true},"public":{"type":"bool","description":"Whether the IPv4 address is public or private.","description_kind":"plain","optional":true},"rdns":{"type":"string","description":"The reverse DNS assigned to this address.","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"The region this IP resides in.","description_kind":"plain","computed":true},"subnet_mask":{"type":"string","description":"The mask that separates host bits from network bits for this address.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The type of IP address.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_instance_shared_ips":{"version":0,"block":{"attributes":{"addresses":{"type":["set","string"],"description":"A set of IP addresses to share to the Linode","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"linode_id":{"type":"number","description":"The ID of the Linode to share these IP addresses with.","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_ipv6_range":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_bgp":{"type":"bool","description":"Whether this IPv6 range is shared.","description_kind":"plain","computed":true},"linode_id":{"type":"number","description":"The ID of the Linode to assign this range to.","description_kind":"plain","optional":true},"linodes":{"type":["set","number"],"description":"A list of Linodes targeted by this IPv6 range. Includes Linodes with IP sharing.","description_kind":"plain","computed":true},"prefix_length":{"type":"number","description":"The prefix length of the IPv6 range.","description_kind":"plain","required":true},"range":{"type":"string","description":"The IPv6 range of addresses in this pool.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region for this range of IPv6 addresses.","description_kind":"plain","computed":true},"route_target":{"type":"string","description":"The IPv6 SLAAC address to assign this range to.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"linode_lke_cluster":{"version":0,"block":{"attributes":{"api_endpoints":{"type":["list","string"],"description":"The API endpoints for the cluster.","description_kind":"plain","computed":true},"dashboard_url":{"type":"string","description":"The dashboard URL of the cluster.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"k8s_version":{"type":"string","description":"The desired Kubernetes version for this Kubernetes cluster in the format of \u003cmajor\u003e.\u003cminor\u003e. The latest supported patch version will be deployed.","description_kind":"plain","required":true},"kubeconfig":{"type":"string","description":"The Base64-encoded Kubeconfig for the cluster.","description_kind":"plain","computed":true,"sensitive":true},"label":{"type":"string","description":"The unique label for the cluster.","description_kind":"plain","required":true},"region":{"type":"string","description":"This cluster's location.","description_kind":"plain","required":true},"status":{"type":"string","description":"The status of the cluster.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","optional":true}},"block_types":{"control_plane":{"nesting_mode":"list","block":{"attributes":{"high_availability":{"type":"bool","description":"Defines whether High Availability is enabled for the Control Plane Components of the cluster.","description_kind":"plain","optional":true,"computed":true}},"description":"Defines settings for the Kubernetes Control Plane.","description_kind":"plain"},"max_items":1},"pool":{"nesting_mode":"list","block":{"attributes":{"count":{"type":"number","description":"The number of nodes in the Node Pool.","description_kind":"plain","required":true},"id":{"type":"number","description":"The ID of the Node Pool.","description_kind":"plain","computed":true},"nodes":{"type":["list",["object",{"id":"string","instance_id":"number","status":"string"}]],"description":"The nodes in the node pool.","description_kind":"plain","computed":true},"type":{"type":"string","description":"A Linode Type for all of the nodes in the Node Pool.","description_kind":"plain","required":true}},"block_types":{"autoscaler":{"nesting_mode":"list","block":{"attributes":{"max":{"type":"number","description":"The maximum number of nodes to autoscale to.","description_kind":"plain","required":true},"min":{"type":"number","description":"The minimum number of nodes to autoscale to.","description_kind":"plain","required":true}},"description":"When specified, the number of nodes autoscales within the defined minimum and maximum values.","description_kind":"plain"},"max_items":1}},"description":"A node pool in the cluster.","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"}},"linode_nodebalancer":{"version":1,"block":{"attributes":{"client_conn_throttle":{"type":"number","description":"Throttle connections per second (0-20). Set to 0 (zero) to disable throttling.","description_kind":"plain","optional":true},"created":{"type":"string","description":"When this NodeBalancer was created.","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"This NodeBalancer's hostname, ending with .nodebalancer.linode.com","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipv4":{"type":"string","description":"The Public IPv4 Address of this NodeBalancer","description_kind":"plain","computed":true},"ipv6":{"type":"string","description":"The Public IPv6 Address of this NodeBalancer","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of the Linode NodeBalancer.","description_kind":"plain","optional":true},"region":{"type":"string","description":"The region where this NodeBalancer will be deployed.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","optional":true},"transfer":{"type":["list",["object",{"in":"number","out":"number","total":"number"}]],"description":"Information about the amount of transfer this NodeBalancer has had so far this month.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this NodeBalancer was last updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_nodebalancer_config":{"version":1,"block":{"attributes":{"algorithm":{"type":"string","description":"What algorithm this NodeBalancer should use for routing traffic to backends: roundrobin, leastconn, source","description_kind":"plain","optional":true,"computed":true},"check":{"type":"string","description":"The type of check to perform against backends to ensure they are serving requests. This is used to determine if backends are up or down. If none no check is performed. connection requires only a connection to the backend to succeed. http and http_body rely on the backend serving HTTP, and that the response returned matches what is expected.","description_kind":"plain","optional":true,"computed":true},"check_attempts":{"type":"number","description":"How many times to attempt a check before considering a backend to be down. (1-30)","description_kind":"plain","optional":true,"computed":true},"check_body":{"type":"string","description":"This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down","description_kind":"plain","optional":true,"computed":true},"check_interval":{"type":"number","description":"How often, in seconds, to check that backends are up and serving requests.","description_kind":"plain","optional":true,"computed":true},"check_passive":{"type":"bool","description":"If true, any response from this backend with a 5xx status code will be enough for it to be considered unhealthy and taken out of rotation.","description_kind":"plain","optional":true,"computed":true},"check_path":{"type":"string","description":"The URL path to check on each backend. If the backend does not respond to this request it is considered to be down.","description_kind":"plain","optional":true,"computed":true},"check_timeout":{"type":"number","description":"How long, in seconds, to wait for a check attempt before considering it failed. (1-30)","description_kind":"plain","optional":true,"computed":true},"cipher_suite":{"type":"string","description":"What ciphers to use for SSL connections served by this NodeBalancer. `legacy` is considered insecure and should only be used if necessary.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"node_status":{"type":["list",["object",{"down":"number","up":"number"}]],"description":"A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends.","description_kind":"plain","computed":true},"nodebalancer_id":{"type":"number","description":"The ID of the NodeBalancer to access.","description_kind":"plain","required":true},"port":{"type":"number","description":"The TCP port this Config is for. These values must be unique across configs on a single NodeBalancer (you can't have two configs for port 80, for example). While some ports imply some protocols, no enforcement is done and you may configure your NodeBalancer however is useful to you. For example, while port 443 is generally used for HTTPS, you do not need SSL configured to have a NodeBalancer listening on port 443.","description_kind":"plain","optional":true},"protocol":{"type":"string","description":"The protocol this port is configured to serve. If this is set to https you must include an ssl_cert and an ssl_key.","description_kind":"plain","optional":true},"proxy_protocol":{"type":"string","description":"The version of ProxyProtocol to use for the underlying NodeBalancer. This requires protocol to be `tcp`. Valid values are `none`, `v1`, and `v2`.","description_kind":"plain","optional":true},"ssl_cert":{"type":"string","description":"The certificate this port is serving. This is not returned. If set, this field will come back as `\u003cREDACTED\u003e`. Please use the ssl_commonname and ssl_fingerprint to identify the certificate.","description_kind":"plain","optional":true,"sensitive":true},"ssl_commonname":{"type":"string","description":"The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.","description_kind":"plain","computed":true},"ssl_fingerprint":{"type":"string","description":"The read-only fingerprint automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.","description_kind":"plain","computed":true},"ssl_key":{"type":"string","description":"The private key corresponding to this port's certificate. This is not returned. If set, this field will come back as `\u003cREDACTED\u003e`. Please use the ssl_commonname and ssl_fingerprint to identify the certificate.","description_kind":"plain","optional":true,"sensitive":true},"stickiness":{"type":"string","description":"Controls how session stickiness is handled on this port: 'none', 'table', 'http_cookie'","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"linode_nodebalancer_node":{"version":0,"block":{"attributes":{"address":{"type":"string","description":"The private IP Address and port (IP:PORT) where this backend can be reached. This must be a private IP address.","description_kind":"plain","required":true},"config_id":{"type":"number","description":"The ID of the NodeBalancerConfig to access.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label for this node. This is for display purposes only.","description_kind":"plain","required":true},"mode":{"type":"string","description":"The mode this NodeBalancer should use when sending traffic to this backend. If set to `accept` this backend is accepting traffic. If set to `reject` this backend will not receive traffic. If set to `drain` this backend will not receive new traffic, but connections already pinned to it will continue to be routed to it. If set to `backup` this backend will only accept traffic if all other nodes are down.","description_kind":"plain","optional":true,"computed":true},"nodebalancer_id":{"type":"number","description":"The ID of the NodeBalancer to access.","description_kind":"plain","required":true},"status":{"type":"string","description":"The current status of this node, based on the configured checks of its NodeBalancer Config. (unknown, UP, DOWN)","description_kind":"plain","computed":true},"weight":{"type":"number","description":"Used when picking a backend to serve a request and is not pinned to a single backend yet. Nodes with a higher weight will receive more traffic. (1-255)","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"linode_object_storage_bucket":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"The S3 access key to use for this resource. (Required for lifecycle_rule and versioning)","description_kind":"plain","optional":true},"acl":{"type":"string","description":"The Access Control Level of the bucket using a canned ACL string.","description_kind":"plain","optional":true},"cluster":{"type":"string","description":"The cluster of the Linode Object Storage Bucket.","description_kind":"plain","required":true},"cors_enabled":{"type":"bool","description":"If true, the bucket will be created with CORS enabled for all origins.","description_kind":"plain","optional":true},"hostname":{"type":"string","description":"The hostname where this bucket can be accessed. This hostname can be accessed through a browser if the bucket is made public.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label of the Linode Object Storage Bucket.","description_kind":"plain","required":true},"secret_key":{"type":"string","description":"The S3 secret key to use for this resource. (Required for lifecycle_rule and versioning)","description_kind":"plain","optional":true},"versioning":{"type":"bool","description":"Whether to enable versioning.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"cert":{"nesting_mode":"list","block":{"attributes":{"certificate":{"type":"string","description":"The Base64 encoded and PEM formatted SSL certificate.","description_kind":"plain","required":true,"sensitive":true},"private_key":{"type":"string","description":"The private key associated with the TLS/SSL certificate.","description_kind":"plain","required":true,"sensitive":true}},"description":"The cert used by this Object Storage Bucket.","description_kind":"plain"},"max_items":1},"lifecycle_rule":{"nesting_mode":"list","block":{"attributes":{"abort_incomplete_multipart_upload_days":{"type":"number","description":"Specifies the number of days after initiating a multipart upload when the multipart upload must be completed.","description_kind":"plain","optional":true},"enabled":{"type":"bool","description":"Specifies whether the lifecycle rule is active.","description_kind":"plain","required":true},"id":{"type":"string","description":"The unique identifier for the rule.","description_kind":"plain","optional":true,"computed":true},"prefix":{"type":"string","description":"The object key prefix identifying one or more objects to which the rule applies.","description_kind":"plain","optional":true}},"block_types":{"expiration":{"nesting_mode":"list","block":{"attributes":{"date":{"type":"string","description":"Specifies the date after which you want the corresponding action to take effect.","description_kind":"plain","optional":true},"days":{"type":"number","description":"Specifies the number of days after object creation when the specific rule action takes effect.","description_kind":"plain","optional":true},"expired_object_delete_marker":{"type":"bool","description":"Directs Linode Object Storage to remove expired deleted markers.","description_kind":"plain","optional":true}},"description":"Specifies a period in the object's expire.","description_kind":"plain"},"max_items":1},"noncurrent_version_expiration":{"nesting_mode":"list","block":{"attributes":{"days":{"type":"number","description":"Specifies the number of days non-current object versions expire.","description_kind":"plain","required":true}},"description":"Specifies when non-current object versions expire.","description_kind":"plain"},"max_items":1}},"description":"Lifecycle rules to be applied to the bucket.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_object_storage_key":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"This keypair's access key. This is not secret.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label given to this key. For display purposes only.","description_kind":"plain","required":true},"limited":{"type":"bool","description":"Whether or not this key is a limited access key.","description_kind":"plain","computed":true},"secret_key":{"type":"string","description":"This keypair's secret key.","description_kind":"plain","computed":true,"sensitive":true}},"block_types":{"bucket_access":{"nesting_mode":"list","block":{"attributes":{"bucket_name":{"type":"string","description":"The unique label of the bucket to which the key will grant limited access.","description_kind":"plain","required":true},"cluster":{"type":"string","description":"The Object Storage cluster where a bucket to which the key is granting access is hosted.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"This Limited Access Key’s permissions for the selected bucket.","description_kind":"plain","required":true}},"description":"A list of permissions to grant this limited access key.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_object_storage_object":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"The S3 access key with access to the target bucket.","description_kind":"plain","required":true},"acl":{"type":"string","description":"The ACL config given to this object.","description_kind":"plain","optional":true},"bucket":{"type":"string","description":"The target bucket to put this object in.","description_kind":"plain","required":true},"cache_control":{"type":"string","description":"This cache_control configuration of this object.","description_kind":"plain","optional":true},"cluster":{"type":"string","description":"The target cluster that the bucket is in.","description_kind":"plain","required":true},"content":{"type":"string","description":"The contents of the Object to upload.","description_kind":"plain","optional":true},"content_base64":{"type":"string","description":"The base64 contents of the Object to upload.","description_kind":"plain","optional":true},"content_disposition":{"type":"string","description":"The content disposition configuration of this object.","description_kind":"plain","optional":true},"content_encoding":{"type":"string","description":"The encoding of the content of this object.","description_kind":"plain","optional":true},"content_language":{"type":"string","description":"The language metadata of this object.","description_kind":"plain","optional":true},"content_type":{"type":"string","description":"The MIME type of the content.","description_kind":"plain","optional":true,"computed":true},"etag":{"type":"string","description":"The specific version of this object.","description_kind":"plain","optional":true,"computed":true},"force_destroy":{"type":"bool","description":"Whether the object should bypass deletion restrictions.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The name of the uploaded object.","description_kind":"plain","required":true},"metadata":{"type":["map","string"],"description":"The metadata of this object","description_kind":"plain","optional":true},"secret_key":{"type":"string","description":"The S3 secret key with access to the target bucket.","description_kind":"plain","required":true},"source":{"type":"string","description":"The source file to upload.","description_kind":"plain","optional":true},"version_id":{"type":"string","description":"The version ID of this object.","description_kind":"plain","computed":true},"website_redirect":{"type":"string","description":"The website redirect location of this object.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"linode_rdns":{"version":0,"block":{"attributes":{"address":{"type":"string","description":"The public Linode IPv4 or IPv6 address to operate on.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"rdns":{"type":"string","description":"The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.","description_kind":"plain","required":true},"wait_for_available":{"type":"bool","description":"If true, the RDNS assignment will be retried within the operation timeout period.","description_kind":"plain","optional":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_sshkey":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date this key was added.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label of the Linode SSH Key.","description_kind":"plain","required":true},"ssh_key":{"type":"string","description":"The public SSH Key, which is used to authenticate to the root user of the Linodes you deploy.","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_stackscript":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date this StackScript was created.","description_kind":"plain","computed":true},"deployments_active":{"type":"number","description":"Count of currently active, deployed Linodes created from this StackScript.","description_kind":"plain","computed":true},"deployments_total":{"type":"number","description":"The total number of times this StackScript has been deployed.","description_kind":"plain","computed":true},"description":{"type":"string","description":"A description for the StackScript.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"images":{"type":["list","string"],"description":"An array of Image IDs representing the Images that this StackScript is compatible for deploying with.","description_kind":"plain","required":true},"is_public":{"type":"bool","description":"This determines whether other users can use your StackScript. Once a StackScript is made public, it cannot be made private.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The StackScript's label is for display purposes only.","description_kind":"plain","required":true},"rev_note":{"type":"string","description":"This field allows you to add notes for the set of revisions made to this StackScript.","description_kind":"plain","optional":true},"script":{"type":"string","description":"The script to execute when provisioning a new Linode with this StackScript.","description_kind":"plain","required":true},"updated":{"type":"string","description":"The date this StackScript was updated.","description_kind":"plain","computed":true},"user_defined_fields":{"type":["list",["object",{"default":"string","example":"string","label":"string","many_of":"string","name":"string","one_of":"string"}]],"description":"This is a list of fields defined with a special syntax inside this StackScript that allow for supplying customized parameters during deployment.","description_kind":"plain","optional":true,"computed":true},"user_gravatar_id":{"type":"string","description":"The Gravatar ID for the User who created the StackScript.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The User who created the StackScript.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_token":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date and time this token was created.","description_kind":"plain","computed":true},"expiry":{"type":"string","description":"When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. Tokens may be created with 'null' as their expiry and will never expire unless revoked. Format: 2006-01-02T15:04:05Z07:00","description_kind":"plain","optional":true},"id":{"type":"string","description":"The ID of the token.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of the Linode Token.","description_kind":"plain","optional":true},"scopes":{"type":"string","description":"The scopes this token was created with. These define what parts of the Account the token can be used to access. Many command-line tools, such as the Linode CLI, require tokens with access to *. Tokens with more restrictive scopes are generally more secure. Multiple scopes are separated by a space character (e.g., \"databases:read_only events:read_only\"). You can find the list of available scopes on Linode API docs site, https://www.linode.com/docs/api#oauth-reference","description_kind":"plain","required":true},"token":{"type":"string","description":"The token used to access the API.","description_kind":"plain","computed":true,"sensitive":true}},"description_kind":"plain"}},"linode_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email of the user.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"restricted":{"type":"bool","description":"If true, the user must be explicitly granted access to platform actions and entities.","description_kind":"plain","optional":true},"ssh_keys":{"type":["list","string"],"description":"SSH keys to add to the user profile.","description_kind":"plain","computed":true},"tfa_enabled":{"type":"bool","description":"If the User has Two Factor Authentication (TFA) enabled.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The username of the user.","description_kind":"plain","required":true}},"block_types":{"domain_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"firewall_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"global_grants":{"nesting_mode":"list","block":{"attributes":{"account_access":{"type":"string","description":"The level of access this User has to Account-level actions, like billing information. A restricted User will never be able to manage users.","description_kind":"plain","optional":true},"add_databases":{"type":"bool","description":"If true, this User may add Databases.","description_kind":"plain","optional":true},"add_domains":{"type":"bool","description":"If true, this User may add Domains.","description_kind":"plain","optional":true},"add_firewalls":{"type":"bool","description":"If true, this User may add Firewalls.","description_kind":"plain","optional":true},"add_images":{"type":"bool","description":"If true, this User may add Images.","description_kind":"plain","optional":true},"add_linodes":{"type":"bool","description":"If true, this User may create Linodes.","description_kind":"plain","optional":true},"add_longview":{"type":"bool","description":"If true, this User may create Longview clients and view the current plan.","description_kind":"plain","optional":true},"add_nodebalancers":{"type":"bool","description":"If true, this User may add NodeBalancers.","description_kind":"plain","optional":true},"add_stackscripts":{"type":"bool","description":"If true, this User may add StackScripts.","description_kind":"plain","optional":true},"add_volumes":{"type":"bool","description":"If true, this User may add Volumes.","description_kind":"plain","optional":true},"cancel_account":{"type":"bool","description":"If true, this User may cancel the entire Account.","description_kind":"plain","optional":true},"longview_subscription":{"type":"bool","description":"If true, this User may manage the Account’s Longview subscription.","description_kind":"plain","optional":true}},"description":"A structure containing the Account-level grants a User has.","description_kind":"plain"},"max_items":1},"image_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"linode_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"longview_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"nodebalancer_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"stackscript_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"volume_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_volume":{"version":0,"block":{"attributes":{"filesystem_path":{"type":"string","description":"The full filesystem path for the Volume based on the Volume's label. Path is /dev/disk/by-id/scsi-0Linode_Volume_ + Volume label.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label of the Linode Volume.","description_kind":"plain","required":true},"linode_id":{"type":"number","description":"The Linode ID where the Volume should be attached.","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"The region where this volume will be deployed.","description_kind":"plain","optional":true,"computed":true},"size":{"type":"number","description":"Size of the Volume in GB","description_kind":"plain","optional":true,"computed":true},"source_volume_id":{"type":"number","description":"The ID of a volume to clone.","description_kind":"plain","optional":true},"status":{"type":"string","description":"The status of the volume, indicating the current readiness state.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","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"}}},"data_source_schemas":{"linode_account":{"version":0,"block":{"attributes":{"address_1":{"type":"string","description":"First line of this Account's billing address.","description_kind":"plain","computed":true},"address_2":{"type":"string","description":"Second line of this Account's billing address.","description_kind":"plain","computed":true},"balance":{"type":"number","description":"This Account's balance, in US dollars.","description_kind":"plain","computed":true},"city":{"type":"string","description":"The city for this Account's billing address.","description_kind":"plain","computed":true},"company":{"type":"string","description":"The company name associated with this Account.","description_kind":"plain","computed":true},"country":{"type":"string","description":"The two-letter country code of this Account's billing address.","description_kind":"plain","computed":true},"email":{"type":"string","description":"The email address for this Account, for account management communications, and may be used for other communications as configured.","description_kind":"plain","computed":true},"first_name":{"type":"string","description":"The first name of the person associated with this Account.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"last_name":{"type":"string","description":"The last name of the person associated with this Account.","description_kind":"plain","computed":true},"phone":{"type":"string","description":"The phone number associated with this Account.","description_kind":"plain","computed":true},"state":{"type":"string","description":"If billing address is in the United States, this is the State portion of the Account's billing address. If the address is outside the US, this is the Province associated with the Account's billing address.","description_kind":"plain","computed":true},"zip":{"type":"string","description":"The zip code of this Account's billing address.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_account_login":{"version":0,"block":{"attributes":{"datetime":{"type":"string","description":"The time when the login was initiated.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID of this login object.","description_kind":"plain","required":true},"ip":{"type":"string","description":"The remote IP address that requested the login.","description_kind":"plain","computed":true},"restricted":{"type":"bool","description":"TTrue if the User that was logged into was a restricted User, false otherwise.","description_kind":"plain","computed":true},"status":{"type":"string","description":"Whether the login attempt succeeded or failed.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The username of the User that was logged into.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_account_logins":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"logins":{"type":["list",["object",{"datetime":"string","id":"number","ip":"string","restricted":"bool","status":"string","username":"string"}]],"description":"The returned list of account logins.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_account_settings":{"version":0,"block":{"attributes":{"backups_enabled":{"type":"bool","description":"Account-wide backups default.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"longview_subscription":{"type":"string","description":"The Longview Pro tier you are currently subscribed to.","description_kind":"plain","computed":true},"managed":{"type":"bool","description":"Enables monitoring for connectivity, response, and total request time.","description_kind":"plain","computed":true},"network_helper":{"type":"bool","description":"Enables network helper across all users by default for new Linodes and Linode Configs.","description_kind":"plain","computed":true},"object_storage":{"type":"string","description":"A string describing the status of this account’s Object Storage service enrollment.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_database_backups":{"version":0,"block":{"attributes":{"backups":{"type":["list",["object",{"created":"string","id":"number","label":"string","type":"string"}]],"description":"The returned list of backups.","description_kind":"plain","computed":true},"database_id":{"type":"number","description":"The ID of the Managed Database.","description_kind":"plain","required":true},"database_type":{"type":"string","description":"The type of the Managed Database","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"latest":{"type":"bool","description":"If true, only the latest backup will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_database_engines":{"version":0,"block":{"attributes":{"engines":{"type":["list",["object",{"engine":"string","id":"string","version":"string"}]],"description":"The returned list of engines.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"latest":{"type":"bool","description":"If true, only the latest engine version will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_database_mongodb":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","computed":true},"compression_type":{"type":"string","description":"The type of data compression for this Database.","description_kind":"plain","computed":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"database_id":{"type":"number","description":"The ID of the MongoDB database.","description_kind":"plain","required":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","computed":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. mongodb/4.4.10)","description_kind":"plain","computed":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","computed":true},"peers":{"type":["set","string"],"description":"A set of peer addresses for this Database.","description_kind":"plain","computed":true},"port":{"type":"number","description":"The access port for this Managed Database.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","computed":true},"replica_set":{"type":"string","description":"Label for configuring a MongoDB replica set. Choose the same label on multiple Databases to include them in the same replica set.","description_kind":"plain","computed":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"storage_engine":{"type":"string","description":"The type of storage engine for this Database.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"updates":{"type":["list",["object",{"day_of_week":"string","duration":"number","frequency":"string","hour_of_day":"number","week_of_month":"number"}]],"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_database_mysql":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","computed":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"database_id":{"type":"number","description":"The ID of the MySQL database.","description_kind":"plain","required":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","computed":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. mysql/8.0.26)","description_kind":"plain","computed":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","computed":true},"replication_type":{"type":"string","description":"The replication method used for the Managed Database.","description_kind":"plain","computed":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"updates":{"type":["list",["object",{"day_of_week":"string","duration":"number","frequency":"string","hour_of_day":"number","week_of_month":"number"}]],"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_database_mysql_backups":{"version":0,"block":{"attributes":{"backups":{"type":["list",["object",{"created":"string","id":"number","label":"string","type":"string"}]],"description":"The returned list of backups.","description_kind":"plain","computed":true},"database_id":{"type":"number","description":"The ID of the Managed MySQL Database.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"latest":{"type":"bool","description":"If true, only the latest backup will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_database_postgresql":{"version":0,"block":{"attributes":{"allow_list":{"type":["set","string"],"description":"A list of IP addresses that can access the Managed Database. Each item can be a single IP address or a range in CIDR format.","description_kind":"plain","computed":true},"ca_cert":{"type":"string","description":"The base64-encoded SSL CA certificate for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database. Defaults to 1.","description_kind":"plain","computed":true},"created":{"type":"string","description":"When this Managed Database was created.","description_kind":"plain","computed":true},"database_id":{"type":"number","description":"The ID of the MongoDB database.","description_kind":"plain","required":true},"encrypted":{"type":"bool","description":"Whether the Managed Databases is encrypted.","description_kind":"plain","computed":true},"engine":{"type":"string","description":"The Managed Database engine.","description_kind":"plain","computed":true},"engine_id":{"type":"string","description":"The Managed Database engine in engine/version format. (e.g. postgresql/12.6)","description_kind":"plain","computed":true},"host_primary":{"type":"string","description":"The primary host for the Managed Database.","description_kind":"plain","computed":true},"host_secondary":{"type":"string","description":"The secondary host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"A unique, user-defined string referring to the Managed Database.","description_kind":"plain","computed":true},"port":{"type":"number","description":"The access port for this Managed Database.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region to use for the Managed Database.","description_kind":"plain","computed":true},"replication_commit_type":{"type":"string","description":"The synchronization level of the replicating server.","description_kind":"plain","computed":true},"replication_type":{"type":"string","description":"The replication method used for the Managed Database.","description_kind":"plain","computed":true},"root_password":{"type":"string","description":"The randomly-generated root password for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"root_username":{"type":"string","description":"The root username for the Managed Database instance.","description_kind":"plain","computed":true,"sensitive":true},"ssl_connection":{"type":"bool","description":"Whether to require SSL credentials to establish a connection to the Managed Database.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The operating status of the Managed Database.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The Linode Instance type used by the Managed Database for its nodes.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this Managed Database was last updated.","description_kind":"plain","computed":true},"updates":{"type":["list",["object",{"day_of_week":"string","duration":"number","frequency":"string","hour_of_day":"number","week_of_month":"number"}]],"description":"Configuration settings for automated patch update maintenance for the Managed Database.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_databases":{"version":0,"block":{"attributes":{"databases":{"type":["list",["object",{"allow_list":["list","string"],"cluster_size":"number","created":"string","encrypted":"bool","engine":"string","host_primary":"string","host_secondary":"string","id":"number","instance_uri":"string","label":"string","region":"string","replication_type":"string","ssl_connection":"bool","status":"string","type":"string","updated":"string","version":"string"}]],"description":"The returned list of databases.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"latest":{"type":"bool","description":"If true, only the latest created database will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_domain":{"version":0,"block":{"attributes":{"axfr_ips":{"type":["set","string"],"description":"The list of IPs that may perform a zone transfer for this Domain. This is potentially dangerous, and should be set to an empty list unless you intend to use it.","description_kind":"plain","computed":true},"description":{"type":"string","description":"A description for this Domain. This is for display purposes only.","description_kind":"plain","computed":true},"domain":{"type":"string","description":"The domain this Domain represents. These must be unique in Linode's system; there cannot be two Domain records representing the same domain.","description_kind":"plain","optional":true},"expire_sec":{"type":"number","description":"The amount of time in seconds that may pass before this Domain is no longer authoritative. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","computed":true},"group":{"type":"string","description":"The group this Domain belongs to. This is for display purposes only.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The unique ID assigned to this domain","description_kind":"plain","optional":true},"master_ips":{"type":["set","string"],"description":"The IP addresses representing the master DNS for this Domain.","description_kind":"plain","computed":true},"refresh_sec":{"type":"number","description":"The amount of time in seconds before this Domain should be refreshed. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","computed":true},"retry_sec":{"type":"number","description":"The interval, in seconds, at which a failed refresh should be retried. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","computed":true},"soa_email":{"type":"string","description":"Start of Authority email address. This is required for master Domains.","description_kind":"plain","computed":true},"status":{"type":"string","description":"Used to control whether this Domain is currently being rendered.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","computed":true},"ttl_sec":{"type":"number","description":"'Time to Live' - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value.","description_kind":"plain","computed":true},"type":{"type":"string","description":"If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave).","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_domain_record":{"version":0,"block":{"attributes":{"domain_id":{"type":"number","description":"The associated domain's ID.","description_kind":"plain","required":true},"id":{"type":"number","description":"The unique ID assigned to this domain record.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the Record.","description_kind":"plain","optional":true},"port":{"type":"number","description":"The port this Record points to.","description_kind":"plain","computed":true},"priority":{"type":"number","description":"The priority of the target host. Lower values are preferred.","description_kind":"plain","computed":true},"protocol":{"type":"string","description":"The protocol this Record's service communicates with. Only valid for SRV records.","description_kind":"plain","computed":true},"service":{"type":"string","description":"The service this Record identified. Only valid for SRV records.","description_kind":"plain","computed":true},"tag":{"type":"string","description":"The tag portion of a CAA record.","description_kind":"plain","computed":true},"target":{"type":"string","description":"The target for this Record. This field's actual usage depends on the type of record this represents. For A and AAAA records, this is the address the named Domain should resolve to.","description_kind":"plain","computed":true},"ttl_sec":{"type":"number","description":"The amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The type of Record this is in the DNS system.","description_kind":"plain","computed":true},"weight":{"type":"number","description":"The relative weight of this Record. Higher values are preferred.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_domain_zonefile":{"version":0,"block":{"attributes":{"domain_id":{"type":"number","description":"The domain's ID.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"zone_file":{"type":["list","string"],"description":"Lines of the zone file for the last rendered zone for this domain.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"linode_firewall":{"version":0,"block":{"attributes":{"devices":{"type":["list",["object",{"entity_id":"number","id":"number","label":"string","type":"string","url":"string"}]],"description":"The devices associated with this firewall.","description_kind":"plain","computed":true},"disabled":{"type":"bool","description":"If true, the Firewall is inactive.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID assigned to this Firewall.","description_kind":"plain","required":true},"inbound":{"type":["list",["object",{"action":"string","ipv4":["list","string"],"ipv6":["list","string"],"label":"string","ports":"string","protocol":"string"}]],"description":"A firewall rule that specifies what inbound network traffic is allowed.","description_kind":"plain","computed":true},"inbound_policy":{"type":"string","description":"The default behavior for inbound traffic. This setting can be overridden by updating the inbound.action property for an individual Firewall Rule.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label for the Firewall. For display purposes only. If no label is provided, a default will be assigned.","description_kind":"plain","computed":true},"linodes":{"type":["set","number"],"description":"The IDs of Linodes to apply this firewall to.","description_kind":"plain","computed":true},"outbound":{"type":["list",["object",{"action":"string","ipv4":["list","string"],"ipv6":["list","string"],"label":"string","ports":"string","protocol":"string"}]],"description":"A firewall rule that specifies what outbound network traffic is allowed.","description_kind":"plain","computed":true},"outbound_policy":{"type":"string","description":"The default behavior for outbound traffic. This setting can be overridden by updating the outbound.action property for an individual Firewall Rule.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The status of the firewall.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_image":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"When this Image was created.","description_kind":"plain","computed":true},"created_by":{"type":"string","description":"The name of the User who created this Image.","description_kind":"plain","computed":true},"deprecated":{"type":"bool","description":"Whether or not this Image is deprecated. Will only be True for deprecated public Images.","description_kind":"plain","computed":true},"description":{"type":"string","description":"A detailed description of this Image.","description_kind":"plain","computed":true},"expiry":{"type":"string","description":"Only Images created automatically (from a deleted Linode; type=automatic) will expire.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The unique ID assigned to this Image.","description_kind":"plain","required":true},"is_public":{"type":"bool","description":"True if the Image is public.","description_kind":"plain","computed":true},"label":{"type":"string","description":"A short description of the Image. Labels cannot contain special characters.","description_kind":"plain","computed":true},"size":{"type":"number","description":"The minimum size this Image needs to deploy. Size is in MB.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The current status of this Image.","description_kind":"plain","computed":true},"type":{"type":"string","description":"How the Image was created. 'Manual' Images can be created at any time. 'Automatic' images are created automatically from a deleted Linode.","description_kind":"plain","computed":true},"vendor":{"type":"string","description":"The upstream distribution vendor. Nil for private Images.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_images":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"images":{"type":["list",["object",{"created":"string","created_by":"string","deprecated":"bool","description":"string","expiry":"string","id":"string","is_public":"bool","label":"string","size":"number","status":"string","type":"string","vendor":"string"}]],"description":"The returned list of Images.","description_kind":"plain","computed":true},"latest":{"type":"bool","description":"If true, only the latest image will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_instance_backups":{"version":0,"block":{"attributes":{"automatic":{"type":["list",["object",{"available":"bool","configs":["list","string"],"created":"string","disks":["list",["object",{"filesystem":"string","label":"string","size":"number"}]],"finished":"string","id":"number","label":"string","status":"string","type":"string","updated":"string"}]],"description":"A list of backups or snapshots for a Linode.","description_kind":"plain","computed":true},"current":{"type":["list",["object",{"available":"bool","configs":["list","string"],"created":"string","disks":["list",["object",{"filesystem":"string","label":"string","size":"number"}]],"finished":"string","id":"number","label":"string","status":"string","type":"string","updated":"string"}]],"description":"The current Backup for a Linode.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"in_progress":{"type":["list",["object",{"available":"bool","configs":["list","string"],"created":"string","disks":["list",["object",{"filesystem":"string","label":"string","size":"number"}]],"finished":"string","id":"number","label":"string","status":"string","type":"string","updated":"string"}]],"description":"The in-progress Backup for a Linode","description_kind":"plain","computed":true},"linode_id":{"type":"number","description":"The ID of the Linode to get backups for.","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_instance_networking":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipv4":{"type":["list",["object",{"private":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]],"public":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]],"reserved":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]],"shared":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]]}]],"description":"Information about this Linode’s IPv4 addresses.","description_kind":"plain","computed":true},"ipv6":{"type":["list",["object",{"global":["list",["object",{"prefix":"number","range":"string","region":"string","route_target":"string"}]],"link_local":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]],"slaac":["list",["object",{"address":"string","gateway":"string","prefix":"number","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]]}]],"description":"Information about this Linode’s IPv6 addresses.","description_kind":"plain","computed":true},"linode_id":{"type":"number","description":"The ID of the Linode for network info.","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_instance_type":{"version":0,"block":{"attributes":{"addons":{"type":["list",["object",{"backups":["list",["object",{"price":["list",["object",{"hourly":"number","monthly":"number"}]]}]]}]],"description_kind":"plain","computed":true},"class":{"type":"string","description":"The class of the Linode Type. There are currently three classes of Linodes: nanode, standard, highmem, dedicated","description_kind":"plain","computed":true},"disk":{"type":"number","description":"The Disk size, in MB, of the Linode Type.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The unique ID assigned to this Instance type.","description_kind":"plain","required":true},"label":{"type":"string","description":"The Linode Type's label is for display purposes only.","description_kind":"plain","optional":true,"computed":true},"memory":{"type":"number","description":"Amount of RAM included in this Linode Type.","description_kind":"plain","computed":true},"network_out":{"type":"number","description":"The Mbits outbound bandwidth allocation.","description_kind":"plain","computed":true},"price":{"type":["list",["object",{"hourly":"number","monthly":"number"}]],"description":"Cost in US dollars, broken down into hourly and monthly charges.","description_kind":"plain","computed":true},"transfer":{"type":"number","description":"The monthly outbound transfer amount, in MB.","description_kind":"plain","computed":true},"vcpus":{"type":"number","description":"The number of VCPU cores this Linode Type offers.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_instance_types":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true},"types":{"type":["list",["object",{"addons":["list",["object",{"backups":["list",["object",{"price":["list",["object",{"hourly":"number","monthly":"number"}]]}]]}]],"class":"string","disk":"number","id":"string","label":"string","memory":"number","network_out":"number","price":["list",["object",{"hourly":"number","monthly":"number"}]],"transfer":"number","vcpus":"number"}]],"description":"The returned list of Types.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_instances":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"instances":{"type":["list",["object",{"alerts":["list",["object",{"cpu":"number","io":"number","network_in":"number","network_out":"number","transfer_quota":"number"}]],"backups":["list",["object",{"available":"bool","enabled":"bool","schedule":["list",["object",{"day":"string","window":"string"}]]}]],"boot_config_label":"string","config":["list",["object",{"comments":"string","devices":["list",["object",{"sda":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdb":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdc":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdd":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sde":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdf":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdg":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]],"sdh":["list",["object",{"disk_id":"number","disk_label":"string","volume_id":"number"}]]}]],"helpers":["list",["object",{"devtmpfs_automount":"bool","distro":"bool","modules_dep":"bool","network":"bool","updatedb_disabled":"bool"}]],"interface":["list",["object",{"ipam_address":"string","label":"string","purpose":"string"}]],"kernel":"string","label":"string","memory_limit":"number","root_device":"string","run_level":"string","virt_mode":"string"}]],"disk":["list",["object",{"filesystem":"string","id":"number","label":"string","size":"number"}]],"group":"string","host_uuid":"string","id":"number","image":"string","ip_address":"string","ipv4":["set","string"],"ipv6":"string","label":"string","private_ip_address":"string","region":"string","specs":["list",["object",{"disk":"number","memory":"number","transfer":"number","vcpus":"number"}]],"status":"string","swap_size":"number","tags":["set","string"],"type":"string","watchdog_enabled":"bool"}]],"description":"The returned list of Instances.","description_kind":"plain","computed":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_ipv6_range":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_bgp":{"type":"bool","description":"Whether this IPv6 range is shared.","description_kind":"plain","computed":true},"linodes":{"type":["set","number"],"description":"A list of Linodes targeted by this IPv6 range. Includes Linodes with IP sharing.","description_kind":"plain","computed":true},"prefix":{"type":"number","description":"The prefix length of the address, denoting how many addresses can be assigned from this range.","description_kind":"plain","computed":true},"range":{"type":"string","description":"The IPv6 range to retrieve information about.","description_kind":"plain","required":true},"region":{"type":"string","description":"The region for this range of IPv6 addresses.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_kernel":{"version":0,"block":{"attributes":{"architecture":{"type":"string","description":"The architecture of this Kernel.","description_kind":"plain","computed":true},"deprecated":{"type":"bool","description":"Whether or not this Kernel is deprecated.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The unique ID of this Kernel.","description_kind":"plain","required":true},"kvm":{"type":"bool","description":"If this Kernel is suitable for KVM Linodes.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The friendly name of this Kernel.","description_kind":"plain","computed":true},"pvops":{"type":"bool","description":"If this Kernel is suitable for paravirtualized operations.","description_kind":"plain","computed":true},"version":{"type":"string","description":"Linux Kernel version.","description_kind":"plain","computed":true},"xen":{"type":"bool","description":"If this Kernel is suitable for Xen Linodes.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_lke_cluster":{"version":0,"block":{"attributes":{"api_endpoints":{"type":["list","string"],"description":"The API endpoints for the cluster.","description_kind":"plain","computed":true},"control_plane":{"type":["list",["object",{"high_availability":"bool"}]],"description":"Defines settings for the Kubernetes Control Plane.","description_kind":"plain","computed":true},"dashboard_url":{"type":"string","description":"The dashboard URL of the cluster.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID of this LKE Cluster.","description_kind":"plain","required":true},"k8s_version":{"type":"string","description":"The desired Kubernetes version for this Kubernetes cluster in the format of \u003cmajor\u003e.\u003cminor\u003e. The latest supported patch version will be deployed.","description_kind":"plain","computed":true},"kubeconfig":{"type":"string","description":"The Base64-encoded Kubeconfig for the cluster.","description_kind":"plain","computed":true,"sensitive":true},"label":{"type":"string","description":"The unique label for the cluster.","description_kind":"plain","computed":true},"pools":{"type":["list",["object",{"autoscaler":["list",["object",{"max":"number","min":"number"}]],"count":"number","id":"number","nodes":["list",["object",{"id":"string","instance_id":"number","status":"string"}]],"type":"string"}]],"description":"A node pool in the cluster.","description_kind":"plain","computed":true},"region":{"type":"string","description":"This cluster's location.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The status of the cluster.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_lke_versions":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"versions":{"type":["list",["object",{"id":"string"}]],"description":"The Kubernetes version numbers available for deployment to a Kubernetes cluster.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_networking_ip":{"version":0,"block":{"attributes":{"address":{"type":"string","description":"The IP address.","description_kind":"plain","required":true},"gateway":{"type":"string","description":"The default gateway for this address.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"linode_id":{"type":"number","description":"The ID of the Linode this address currently belongs to.","description_kind":"plain","computed":true},"prefix":{"type":"number","description":"The number of bits set in the subnet mask.","description_kind":"plain","computed":true},"public":{"type":"bool","description":"Whether this is a public or private IP address.","description_kind":"plain","computed":true},"rdns":{"type":"string","description":"The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The Region this IP address resides in.","description_kind":"plain","computed":true},"subnet_mask":{"type":"string","description":"The mask that separates host bits from network bits for this address.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The type of address this is (ipv4, ipv6, ipv6/pool, ipv6/range).","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_nodebalancer":{"version":1,"block":{"attributes":{"client_conn_throttle":{"type":"number","description":"Throttle connections per second (0-20). Set to 0 (zero) to disable throttling.","description_kind":"plain","computed":true},"created":{"type":"string","description":"When this NodeBalancer was created.","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"This NodeBalancer's hostname, ending with .nodebalancer.linode.com","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID of the Linode NodeBalancer.","description_kind":"plain","required":true},"ipv4":{"type":"string","description":"The Public IPv4 Address of this NodeBalancer","description_kind":"plain","computed":true},"ipv6":{"type":"string","description":"The Public IPv6 Address of this NodeBalancer","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of the Linode NodeBalancer.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region where this NodeBalancer will be deployed.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","computed":true},"transfer":{"type":["list",["object",{"in":"number","out":"number","total":"number"}]],"description":"Information about the amount of transfer this NodeBalancer has had so far this month.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When this NodeBalancer was last updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_nodebalancer_config":{"version":1,"block":{"attributes":{"algorithm":{"type":"string","description":"What algorithm this NodeBalancer should use for routing traffic to backends: roundrobin, leastconn, source","description_kind":"plain","computed":true},"check":{"type":"string","description":"The type of check to perform against backends to ensure they are serving requests. This is used to determine if backends are up or down. If none no check is performed. connection requires only a connection to the backend to succeed. http and http_body rely on the backend serving HTTP, and that the response returned matches what is expected.","description_kind":"plain","computed":true},"check_attempts":{"type":"number","description":"How many times to attempt a check before considering a backend to be down. (1-30)","description_kind":"plain","computed":true},"check_body":{"type":"string","description":"This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down","description_kind":"plain","computed":true},"check_interval":{"type":"number","description":"How often, in seconds, to check that backends are up and serving requests.","description_kind":"plain","computed":true},"check_passive":{"type":"bool","description":"If true, any response from this backend with a 5xx status code will be enough for it to be considered unhealthy and taken out of rotation.","description_kind":"plain","computed":true},"check_path":{"type":"string","description":"The URL path to check on each backend. If the backend does not respond to this request it is considered to be down.","description_kind":"plain","computed":true},"check_timeout":{"type":"number","description":"How long, in seconds, to wait for a check attempt before considering it failed. (1-30)","description_kind":"plain","computed":true},"cipher_suite":{"type":"string","description":"What ciphers to use for SSL connections served by this NodeBalancer. `legacy` is considered insecure and should only be used if necessary.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The ID of the NodeBalancer config.","description_kind":"plain","required":true},"node_status":{"type":["list",["object",{"down":"number","up":"number"}]],"description":"A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends.","description_kind":"plain","computed":true},"nodebalancer_id":{"type":"number","description":"The ID of the NodeBalancer to access.","description_kind":"plain","required":true},"port":{"type":"number","description":"The TCP port this Config is for. These values must be unique across configs on a single NodeBalancer (you can't have two configs for port 80, for example). While some ports imply some protocols, no enforcement is done and you may configure your NodeBalancer however is useful to you. For example, while port 443 is generally used for HTTPS, you do not need SSL configured to have a NodeBalancer listening on port 443.","description_kind":"plain","computed":true},"protocol":{"type":"string","description":"The protocol this port is configured to serve. If this is set to https you must include an ssl_cert and an ssl_key.","description_kind":"plain","computed":true},"proxy_protocol":{"type":"string","description":"The version of ProxyProtocol to use for the underlying NodeBalancer. This requires protocol to be `tcp`. Valid values are `none`, `v1`, and `v2`.","description_kind":"plain","computed":true},"ssl_commonname":{"type":"string","description":"The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.","description_kind":"plain","computed":true},"ssl_fingerprint":{"type":"string","description":"The read-only fingerprint automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.","description_kind":"plain","computed":true},"stickiness":{"type":"string","description":"Controls how session stickiness is handled on this port: 'none', 'table', 'http_cookie'","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_nodebalancer_node":{"version":0,"block":{"attributes":{"address":{"type":"string","description":"The private IP Address and port (IP:PORT) where this backend can be reached. This must be a private IP address.","description_kind":"plain","computed":true},"config_id":{"type":"number","description":"The ID of the NodeBalancerConfig to access.","description_kind":"plain","required":true},"id":{"type":"number","description":"The ID of the NodeBalancer node.","description_kind":"plain","required":true},"label":{"type":"string","description":"The label for this node. This is for display purposes only.","description_kind":"plain","computed":true},"mode":{"type":"string","description":"The mode this NodeBalancer should use when sending traffic to this backend. If set to `accept` this backend is accepting traffic. If set to `reject` this backend will not receive traffic. If set to `drain` this backend will not receive new traffic, but connections already pinned to it will continue to be routed to it. If set to `backup` this backend will only accept traffic if all other nodes are down.","description_kind":"plain","computed":true},"nodebalancer_id":{"type":"number","description":"The ID of the NodeBalancer to access.","description_kind":"plain","required":true},"status":{"type":"string","description":"The current status of this node, based on the configured checks of its NodeBalancer Config. (unknown, UP, DOWN)","description_kind":"plain","computed":true},"weight":{"type":"number","description":"Used when picking a backend to serve a request and is not pinned to a single backend yet. Nodes with a higher weight will receive more traffic. (1-255)","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_object_storage_bucket":{"version":0,"block":{"attributes":{"cluster":{"type":"string","description":"The ID of the Object Storage Cluster this bucket is in.","description_kind":"plain","required":true},"created":{"type":"string","description":"When this bucket was created.","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"The hostname where this bucket can be accessed.This hostname can be accessed through a browser if the bucket is made public.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The id of this bucket.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The name of this bucket.","description_kind":"plain","required":true},"objects":{"type":"number","description":"The number of objects stored in this bucket.","description_kind":"plain","computed":true},"size":{"type":"number","description":"The size of the bucket in bytes.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_object_storage_cluster":{"version":0,"block":{"attributes":{"domain":{"type":"string","description":"The base URL for this cluster.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The unique ID of this Cluster.","description_kind":"plain","required":true},"region":{"type":"string","description":"The region this cluster is located in.","description_kind":"plain","optional":true,"computed":true},"static_site_domain":{"type":"string","description":"The base URL for this cluster used when hosting static sites.","description_kind":"plain","optional":true,"computed":true},"status":{"type":"string","description":"This cluster's status.","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"linode_profile":{"version":0,"block":{"attributes":{"authorized_keys":{"type":["list","string"],"description":"The list of SSH Keys authorized to use Lish for this user. This value is ignored if lish_auth_method is 'disabled'.","description_kind":"plain","computed":true},"email":{"type":"string","description":"The profile email address. This address will be used for communication with Linode as necessary.","description_kind":"plain","computed":true},"email_notifications":{"type":"bool","description":"If true, email notifications will be sent about account activity. If false, when false business-critical communications may still be sent through email.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_whitelist_enabled":{"type":"bool","description":"If true, logins for the user will only be allowed from whitelisted IPs. This setting is currently deprecated, and cannot be enabled.","description_kind":"plain","computed":true},"lish_auth_method":{"type":"string","description":"The methods of authentication allowed when connecting via Lish. 'keys_only' is the most secure with the intent to use Lish, and 'disabled' is recommended for users that will not use Lish at all.","description_kind":"plain","computed":true},"referrals":{"type":["list",["object",{"code":"string","completed":"number","credit":"number","pending":"number","total":"number","url":"string"}]],"description":"Credit Card information associated with this Account.","description_kind":"plain","computed":true},"restricted":{"type":"bool","description":"If true, the user has restrictions on what can be accessed on the Account.","description_kind":"plain","computed":true},"timezone":{"type":"string","description":"The profile's preferred timezone. This is not used by the API, and is for the benefit of clients only. All times the API returns are in UTC.","description_kind":"plain","computed":true},"two_factor_auth":{"type":"bool","description":"If true, logins from untrusted computers will require Two Factor Authentication.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The username for logging in to Linode services.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_region":{"version":0,"block":{"attributes":{"capabilities":{"type":["list","string"],"description":"A list of capabilities of this region.","description_kind":"plain","computed":true},"country":{"type":"string","description":"The country where this Region resides.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The unique ID of this Region.","description_kind":"plain","required":true},"label":{"type":"string","description":"Detailed location information for this Region, including city, state or region, and country.","description_kind":"plain","computed":true},"resolvers":{"type":["list",["object",{"ipv4":"string","ipv6":"string"}]],"description_kind":"plain","computed":true},"status":{"type":"string","description":"This region’s current operational status.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_regions":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"regions":{"type":["list",["object",{"capabilities":["list","string"],"country":"string","id":"string","label":"string","resolvers":["list",["object",{"ipv4":"string","ipv6":"string"}]],"status":"string"}]],"description":"The returned list of regions.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_sshkey":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date this key was added.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"label":{"type":"string","description":"The label of the Linode SSH Key.","description_kind":"plain","required":true},"ssh_key":{"type":"string","description":"The public SSH Key, which is used to authenticate to the root user of the Linodes you deploy.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_stackscript":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date this StackScript was created.","description_kind":"plain","computed":true},"deployments_active":{"type":"number","description":"Count of currently active, deployed Linodes created from this StackScript.","description_kind":"plain","computed":true},"deployments_total":{"type":"number","description":"The total number of times this StackScript has been deployed.","description_kind":"plain","computed":true},"description":{"type":"string","description":"A description for the StackScript.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID of this Stackscript.","description_kind":"plain","required":true},"images":{"type":["list","string"],"description":"An array of Image IDs representing the Images that this StackScript is compatible for deploying with.","description_kind":"plain","computed":true},"is_public":{"type":"bool","description":"This determines whether other users can use your StackScript. Once a StackScript is made public, it cannot be made private.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The StackScript's label is for display purposes only.","description_kind":"plain","computed":true},"rev_note":{"type":"string","description":"This field allows you to add notes for the set of revisions made to this StackScript.","description_kind":"plain","computed":true},"script":{"type":"string","description":"The script to execute when provisioning a new Linode with this StackScript.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"The date this StackScript was updated.","description_kind":"plain","computed":true},"user_defined_fields":{"type":["list",["object",{"default":"string","example":"string","label":"string","many_of":"string","name":"string","one_of":"string"}]],"description":"This is a list of fields defined with a special syntax inside this StackScript that allow for supplying customized parameters during deployment.","description_kind":"plain","optional":true,"computed":true},"user_gravatar_id":{"type":"string","description":"The Gravatar ID for the User who created the StackScript.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The User who created the StackScript.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_stackscripts":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"latest":{"type":"bool","description":"If true, only the latest StackScript will be returned.","description_kind":"plain","optional":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true},"stackscripts":{"type":["list",["object",{"created":"string","deployments_active":"number","deployments_total":"number","description":"string","id":"number","images":["list","string"],"is_public":"bool","label":"string","rev_note":"string","script":"string","updated":"string","user_defined_fields":["list",["object",{"default":"string","example":"string","label":"string","many_of":"string","name":"string","one_of":"string"}]],"user_gravatar_id":"string","username":"string"}]],"description":"The returned list of StackScripts.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email address for this User, for account management communications, and may be used for other communications as configured.","description_kind":"plain","computed":true},"global_grants":{"type":["list",["object",{"account_access":"string","add_databases":"bool","add_domains":"bool","add_firewalls":"bool","add_images":"bool","add_linodes":"bool","add_longview":"bool","add_nodebalancers":"bool","add_stackscripts":"bool","add_volumes":"bool","cancel_account":"bool","longview_subscription":"bool"}]],"description":"A structure containing the Account-level grants a User has.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"restricted":{"type":"bool","description":"If true, this User must be granted access to perform actions or access entities on this Account.","description_kind":"plain","computed":true},"ssh_keys":{"type":["list","string"],"description":"A list of SSH Key labels added by this User. These are the keys that will be deployed if this User is included in the authorized_users field of a create Linode, rebuild Linode, or create Disk request.","description_kind":"plain","computed":true},"username":{"type":"string","description":"This User's username. This is used for logging in, and may also be displayed alongside actions the User performs (for example, in Events or public StackScripts).","description_kind":"plain","required":true}},"block_types":{"domain_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"firewall_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"image_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"linode_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"longview_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"nodebalancer_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"stackscript_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}},"volume_grant":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"The ID of the entity this grant applies to.","description_kind":"plain","required":true},"permissions":{"type":"string","description":"The level of access this User has to this entity. If null, this User has no access.","description_kind":"plain","required":true}},"description":"A set containing all of the user's active grants.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_vlans":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"order":{"type":"string","description":"The order in which results should be returned.","description_kind":"plain","optional":true},"order_by":{"type":"string","description":"The attribute to order the results by.","description_kind":"plain","optional":true},"vlans":{"type":["list",["object",{"created":"string","label":"string","linodes":["list","number"],"region":"string"}]],"description":"The returned list of VLANs.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"match_by":{"type":"string","description":"The type of comparison to use for this filter.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the attribute to filter on.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_volume":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"Datetime string representing when the Volume was created.","description_kind":"plain","computed":true},"filesystem_path":{"type":"string","description":"The full filesystem path for the Volume based on the Volume's label. Path is /dev/disk/by-id/scsi-0LinodeVolume + Volume label.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique id of this Volume.","description_kind":"plain","required":true},"label":{"type":"string","description":"The Volume's label. For display purposes only.","description_kind":"plain","computed":true},"linode_id":{"type":"number","description":"If a Volume is attached to a specific Linode, the ID of that Linode will be displayed here.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The datacenter where this Volume is located.","description_kind":"plain","computed":true},"size":{"type":"number","description":"The size of this Volume in GiB.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The status of the Volume. Can be one of active | creating | resizing | contact_support","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"An array of tags applied to this Volume. Tags are for organizational purposes only.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"Datetime string representing when the Volume was last updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}}}}}} diff --git a/examples/install.yaml b/examples/install.yaml index 5dd6bdb..ad38f98 100644 --- a/examples/install.yaml +++ b/examples/install.yaml @@ -3,4 +3,4 @@ kind: Provider metadata: name: provider-linode spec: - package: linode/provider-linode:v0.0.7 + package: linode/provider-linode:v0.0.8 diff --git a/go.mod b/go.mod index 834123b..f9b710b 100644 --- a/go.mod +++ b/go.mod @@ -3,15 +3,15 @@ module github.com/linode/provider-linode go 1.19 require ( - github.com/crossplane/crossplane-runtime v0.19.0-rc.0.0.20221012013934-bce61005a175 - github.com/crossplane/crossplane-tools v0.0.0-20220310165030-1f43fc12793e + github.com/crossplane/crossplane-runtime v0.20.0-rc.0.0.20230406155702-4e1673b7141f + github.com/crossplane/crossplane-tools v0.0.0-20230327091744-4236bf732aa5 github.com/pkg/errors v0.9.1 - github.com/upbound/upjet v0.8.0 + github.com/upbound/upjet v0.9.0-rc.0.0.20230413124512-01e5c1fafb42 gopkg.in/alecthomas/kingpin.v2 v2.2.6 - k8s.io/apimachinery v0.25.0 - k8s.io/client-go v0.25.0 - sigs.k8s.io/controller-runtime v0.12.1 - sigs.k8s.io/controller-tools v0.8.0 + k8s.io/apimachinery v0.26.3 + k8s.io/client-go v0.26.3 + sigs.k8s.io/controller-runtime v0.14.6 + sigs.k8s.io/controller-tools v0.11.3 ) require ( @@ -28,17 +28,17 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // 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.8.0 // indirect - github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/emicklei/go-restful/v3 v3.9.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.13.0 // indirect - github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-logr/zapr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/swag v0.21.1 // indirect - github.com/gobuffalo/flect v0.2.3 // indirect + github.com/gobuffalo/flect v0.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect @@ -55,7 +55,7 @@ require ( github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.4.4 // indirect - github.com/hashicorp/go-retryablehttp v0.6.6 // indirect + github.com/hashicorp/go-retryablehttp v0.7.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 // indirect github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 // indirect @@ -71,20 +71,21 @@ require ( github.com/hashicorp/terraform-plugin-go v0.14.0 // indirect github.com/hashicorp/terraform-plugin-log v0.7.0 // indirect github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.0 // indirect - github.com/hashicorp/vault/api v1.3.1 // indirect - github.com/hashicorp/vault/sdk v0.3.0 // indirect + github.com/hashicorp/vault/api v1.5.0 // indirect + github.com/hashicorp/vault/sdk v0.4.1 // indirect github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d // indirect github.com/iancoleman/strcase v0.2.0 // indirect github.com/imdario/mergo v0.3.12 // indirect - github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.16 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -95,13 +96,13 @@ require ( github.com/muvaf/typewriter v0.0.0-20220131201631-921e94e8e8d7 // indirect github.com/oklog/run v1.0.0 // indirect github.com/pierrec/lz4 v2.5.2+incompatible // indirect - github.com/prometheus/client_golang v1.12.2 // indirect - github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.32.1 // indirect - github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/client_golang v1.14.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect github.com/spf13/afero v1.9.2 // indirect - github.com/spf13/cobra v1.4.0 // indirect + github.com/spf13/cobra v1.6.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/tmccombs/hcl2json v0.3.3 // indirect github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect @@ -109,38 +110,34 @@ 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 - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.7.0 // indirect - go.uber.org/zap v1.19.1 // indirect - golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect - golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect - golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 // indirect - golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect - golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 // indirect - golang.org/x/text v0.3.7 // indirect - golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect - golang.org/x/tools v0.1.12 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.8.0 // indirect + go.uber.org/zap v1.24.0 // indirect + golang.org/x/crypto v0.2.0 // indirect + golang.org/x/mod v0.7.0 // indirect + golang.org/x/net v0.7.0 // indirect + golang.org/x/oauth2 v0.1.0 // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/term v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect + golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.4.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 // indirect - google.golang.org/grpc v1.48.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect + google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd // indirect + google.golang.org/grpc v1.50.1 // indirect + google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/square/go-jose.v2 v2.5.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.25.0 // indirect - k8s.io/apiextensions-apiserver v0.25.0 // indirect - k8s.io/component-base v0.25.0 // indirect - k8s.io/klog/v2 v2.70.1 // indirect - k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect - k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect + k8s.io/api v0.26.3 // indirect + k8s.io/apiextensions-apiserver v0.26.3 // indirect + k8s.io/component-base v0.26.3 // indirect + k8s.io/klog/v2 v2.80.1 // indirect + k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect + k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) - -replace github.com/crossplane/crossplane-runtime => github.com/eljohnson92/crossplane-runtime v0.0.0-20221208172911-ce686bf20e0c - -replace github.com/crossplane/crossplane-tools => github.com/eljohnson92/crossplane-tools v0.0.0-20221206170802-45895cf476c5 diff --git a/go.sum b/go.sum index c42e759..82ba238 100644 --- a/go.sum +++ b/go.sum @@ -92,26 +92,22 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +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 v0.20.0-rc.0.0.20230406155702-4e1673b7141f h1:wDRr6gaoiQstEdddrn0B5SSSgzdXreOQAbdmRH+9JeI= +github.com/crossplane/crossplane-runtime v0.20.0-rc.0.0.20230406155702-4e1673b7141f/go.mod h1:ebtUpmconMy8RKUEhrCXTUFSOpfGQqbKM2E+rjCCYJo= +github.com/crossplane/crossplane-tools v0.0.0-20230327091744-4236bf732aa5 h1:K9H55wcwfXcGroZApIgPmIGRGuZLszsLDCYB12p2yMo= +github.com/crossplane/crossplane-tools v0.0.0-20230327091744-4236bf732aa5/go.mod h1:+e4OaFlOcmr0JvINHl/yvEYBrZawzTgj6pQumOH1SS0= 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/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/eljohnson92/crossplane-runtime v0.0.0-20221208172911-ce686bf20e0c h1:cYkiGnzdhmWhqptng1lOCAjsfYfmHZTs1MpV5ES1Hfc= -github.com/eljohnson92/crossplane-runtime v0.0.0-20221208172911-ce686bf20e0c/go.mod h1:o9ExoilV6k2M3qzSFoRVX4phuww0mLmjs1WrDTvsR4s= -github.com/eljohnson92/crossplane-tools v0.0.0-20221206170802-45895cf476c5 h1:wh1P1KJVlbm/ZcYVaFQZOsvDELdwAkAF+A8jHs5Ohnw= -github.com/eljohnson92/crossplane-tools v0.0.0-20221206170802-45895cf476c5/go.mod h1:nSMaCMuSJgjZZoqLKRPaquH/Kaau2egCtMLVHVsl27g= -github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= -github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= +github.com/emicklei/go-restful/v3 v3.9.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= @@ -119,12 +115,12 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -136,8 +132,8 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= github.com/frankban/quicktest v1.13.0 h1:yNZif1OkDfNoDfb9zZa9aXIpejNR4F23Wely0c+Qdqk= github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -146,11 +142,12 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= @@ -170,8 +167,8 @@ github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3a github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= -github.com/gobuffalo/flect v0.2.3 h1:f/ZukRnSNA/DUpSNDadko7Qc0PhGvsew35p/2tu+CRY= -github.com/gobuffalo/flect v0.2.3/go.mod h1:vmkQwuZYhN5Pc4ljYQZzP+1sq+NEkK+lh20jmEmX3jc= +github.com/gobuffalo/flect v0.3.0 h1:erfPWM+K1rFNIQeRPdeEXxo8yFr/PO17lhRnS8FUrtk= +github.com/gobuffalo/flect v0.3.0/go.mod h1:5pf3aGnsvqvCj50AVni7mJJF8ICxGZ8HomberC3pXLE= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -225,7 +222,6 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -278,8 +274,9 @@ github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ3 github.com/hashicorp/go-plugin v1.4.4 h1:NVdrSdFRt3SkZtNckJ6tog7gbpRrcbOjQi/rgF7JYWQ= github.com/hashicorp/go-plugin v1.4.4/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.6.6 h1:HJunrbHTDDbBb/ay4kxa1n+dLmttUlnP3V9oNE4hmsM= github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= +github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= @@ -320,10 +317,10 @@ github.com/hashicorp/terraform-plugin-log v0.7.0 h1:SDxJUyT8TwN4l5b5/VkiTIaQgY6R github.com/hashicorp/terraform-plugin-log v0.7.0/go.mod h1:p4R1jWBXRTvL4odmEkFfDdhUjHf9zcs/BCoNHAc7IK4= github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.0 h1:FtCLTiTcykdsURXPt/ku7fYXm3y19nbzbZcUxHx9RbI= github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.0/go.mod h1:80wf5oad1tW+oLnbXS4UTYmDCrl7BuN1Q+IA91X1a4Y= -github.com/hashicorp/vault/api v1.3.1 h1:pkDkcgTh47PRjY1NEFeofqR4W/HkNUi9qIakESO2aRM= -github.com/hashicorp/vault/api v1.3.1/go.mod h1:QeJoWxMFt+MsuWcYhmwRLwKEXrjwAFFywzhptMsTIUw= -github.com/hashicorp/vault/sdk v0.3.0 h1:kR3dpxNkhh/wr6ycaJYqp6AFT/i2xaftbfnwZduTKEY= -github.com/hashicorp/vault/sdk v0.3.0/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0= +github.com/hashicorp/vault/api v1.5.0 h1:Bp6yc2bn7CWkOrVIzFT/Qurzx528bdavF3nz590eu28= +github.com/hashicorp/vault/api v1.5.0/go.mod h1:LkMdrZnWNrFaQyYYazWVn7KshilfDidgVBq6YiTq/bM= +github.com/hashicorp/vault/sdk v0.4.1 h1:3SaHOJY687jY1fnB61PtL0cOkKItphrbLmux7T92HBo= +github.com/hashicorp/vault/sdk v0.4.1/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= @@ -333,8 +330,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= +github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= @@ -387,14 +384,16 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= @@ -429,8 +428,8 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= +github.com/onsi/gomega v1.24.2 h1:J/tulyYK6JwBldPViHJReihxxZ+22FHs0piGjQAvoUE= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= @@ -448,26 +447,30 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -480,31 +483,33 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/tmccombs/hcl2json v0.3.3 h1:+DLNYqpWE0CsOQiEZu+OZm5ZBImake3wtITYxQ8uLFQ= github.com/tmccombs/hcl2json v0.3.3/go.mod h1:Y2chtz2x9bAeRTvSibVRVgbLJhLJXKlUeIvjeVdnm4w= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/upbound/upjet v0.8.0 h1:A/g6Vh+kIxCMSkL3m3gLTdlhOVkctTv3AFuGWzJ2fWA= -github.com/upbound/upjet v0.8.0/go.mod h1:3D9wYJGRyTiFZBUPx1hEg5B2HlTc7+94zq42kzyf0VU= +github.com/upbound/upjet v0.9.0-rc.0.0.20230413124512-01e5c1fafb42 h1:kEpQ3I4YXkdatz/dT8LvvFUHbJTPw4SBz4SdFmPS/vw= +github.com/upbound/upjet v0.9.0-rc.0.0.20230413124512-01e5c1fafb42/go.mod h1:IhrO+1L/Ieq7ZCORhiuZ4sShOzl/GoVGVjq0+JCMDYo= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= @@ -537,17 +542,17 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -558,8 +563,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167 h1:O8uGbHCqlTp2P6QJSLmCojM4mN6UemYv8K+dCnmHmu0= -golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.2.0 h1:BRXPfhNivWL5Yq0BGQ39a2sW6t44aODpfxkWjYdzewE= +golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -594,8 +599,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.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -636,8 +641,9 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 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= @@ -648,8 +654,9 @@ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ 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.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 h1:+jnHzr9VPj32ykQVai5DNahi9+NSp7yYuCsl5eAQtL0= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= 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= @@ -661,6 +668,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.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -715,14 +723,15 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU= 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.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 h1:EH1Deb8WZJ0xc0WK//leUHXcX9aLE5SymusoTmMZye8= -golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 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= @@ -731,14 +740,15 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -790,9 +800,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= 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= @@ -865,8 +874,8 @@ google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6D 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 v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 h1:hrbNEivu7Zn1pxvHk6MBrq9iE22woVILTHqexqBxe6I= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd h1:OjndDrsik+Gt+e6fs45z9AxiewiKyLKYpA45W5Kpkks= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -888,9 +897,8 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= 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= @@ -904,9 +912,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 h1:KR8+MyP7/qOlV+8Af01LtjL04bu7on42eVsxT4EyBQk= +google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -941,30 +948,29 @@ 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.25.0 h1:H+Q4ma2U/ww0iGB78ijZx6DRByPz6/733jIuFpX70e0= -k8s.io/api v0.25.0/go.mod h1:ttceV1GyV1i1rnmvzT3BST08N6nGt+dudGrquzVQWPk= -k8s.io/apiextensions-apiserver v0.25.0 h1:CJ9zlyXAbq0FIW8CD7HHyozCMBpDSiH7EdrSTCZcZFY= -k8s.io/apiextensions-apiserver v0.25.0/go.mod h1:3pAjZiN4zw7R8aZC5gR0y3/vCkGlAjCazcg1me8iB/E= -k8s.io/apimachinery v0.25.0 h1:MlP0r6+3XbkUG2itd6vp3oxbtdQLQI94fD5gCS+gnoU= -k8s.io/apimachinery v0.25.0/go.mod h1:qMx9eAk0sZQGsXGu86fab8tZdffHbwUfsvzqKn4mfB0= -k8s.io/client-go v0.25.0 h1:CVWIaCETLMBNiTUta3d5nzRbXvY5Hy9Dpl+VvREpu5E= -k8s.io/client-go v0.25.0/go.mod h1:lxykvypVfKilxhTklov0wz1FoaUZ8X4EwbhS6rpRfN8= -k8s.io/component-base v0.25.0 h1:haVKlLkPCFZhkcqB6WCvpVxftrg6+FK5x1ZuaIDaQ5Y= -k8s.io/component-base v0.25.0/go.mod h1:F2Sumv9CnbBlqrpdf7rKZTmmd2meJq0HizeyY/yAFxk= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= -k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU= +k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE= +k8s.io/apiextensions-apiserver v0.26.3 h1:5PGMm3oEzdB1W/FTMgGIDmm100vn7IaUP5er36dB+YE= +k8s.io/apiextensions-apiserver v0.26.3/go.mod h1:jdA5MdjNWGP+njw1EKMZc64xAT5fIhN6VJrElV3sfpQ= +k8s.io/apimachinery v0.26.3 h1:dQx6PNETJ7nODU3XPtrwkfuubs6w7sX0M8n61zHIV/k= +k8s.io/apimachinery v0.26.3/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= +k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s= +k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ= +k8s.io/component-base v0.26.3 h1:oC0WMK/ggcbGDTkdcqefI4wIZRYdK3JySx9/HADpV0g= +k8s.io/component-base v0.26.3/go.mod h1:5kj1kZYwSC6ZstHJN7oHBqcJC6yyn41eR+Sqa/mQc8E= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= +k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= +k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= 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.12.1 h1:4BJY01xe9zKQti8oRjj/NeHKRXthf1YkYJAgLONFFoI= -sigs.k8s.io/controller-runtime v0.12.1/go.mod h1:BKhxlA4l7FPK4AQcsuL4X6vZeWnKDXez/vp1Y8dxTU0= -sigs.k8s.io/controller-tools v0.8.0 h1:uUkfTGEwrguqYYfcI2RRGUnC8mYdCFDqfwPKUcNJh1o= -sigs.k8s.io/controller-tools v0.8.0/go.mod h1:qE2DXhVOiEq5ijmINcFbqi9GZrrUjzB1TuJU0xa6eoY= +sigs.k8s.io/controller-runtime v0.14.6 h1:oxstGVvXGNnMvY7TAESYk+lzr6S3V5VFxQ6d92KcwQA= +sigs.k8s.io/controller-runtime v0.14.6/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/controller-tools v0.11.3 h1:T1xzLkog9saiyQSLz1XOImu4OcbdXWytc5cmYsBeBiE= +sigs.k8s.io/controller-tools v0.11.3/go.mod h1:qcfX7jfcfYD/b7lAhvqAyTbt/px4GpvN88WKLFFv7p8= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/internal/controller/database/accesscontrols/zz_controller.go b/internal/controller/database/accesscontrols/zz_controller.go index 772681e..f0f1ecb 100755 --- a/internal/controller/database/accesscontrols/zz_controller.go +++ b/internal/controller/database/accesscontrols/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.AccessControls_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_database_access_controls"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_database_access_controls"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.AccessControls_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.AccessControls_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/database/mongodb/zz_controller.go b/internal/controller/database/mongodb/zz_controller.go index 4fa03ae..4cfa7dd 100755 --- a/internal/controller/database/mongodb/zz_controller.go +++ b/internal/controller/database/mongodb/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.MongoDB_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_database_mongodb"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_database_mongodb"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.MongoDB_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.MongoDB_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/database/mysql/zz_controller.go b/internal/controller/database/mysql/zz_controller.go index e27740b..75a3a0b 100755 --- a/internal/controller/database/mysql/zz_controller.go +++ b/internal/controller/database/mysql/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.MySQL_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_database_mysql"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_database_mysql"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.MySQL_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.MySQL_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/database/postgresql/zz_controller.go b/internal/controller/database/postgresql/zz_controller.go index e2f53c8..ae1c956 100755 --- a/internal/controller/database/postgresql/zz_controller.go +++ b/internal/controller/database/postgresql/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.PostgreSQL_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_database_postgresql"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_database_postgresql"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.PostgreSQL_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.PostgreSQL_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/domain/domain/zz_controller.go b/internal/controller/domain/domain/zz_controller.go index efe0502..d22b9e2 100755 --- a/internal/controller/domain/domain/zz_controller.go +++ b/internal/controller/domain/domain/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Domain_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_domain"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_domain"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Domain_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Domain_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/domain/record/zz_controller.go b/internal/controller/domain/record/zz_controller.go index cf57f0c..513427a 100755 --- a/internal/controller/domain/record/zz_controller.go +++ b/internal/controller/domain/record/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Record_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_domain_record"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_domain_record"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Record_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Record_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/firewall/device/zz_controller.go b/internal/controller/firewall/device/zz_controller.go index e75aed6..c11c2e0 100755 --- a/internal/controller/firewall/device/zz_controller.go +++ b/internal/controller/firewall/device/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Device_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_firewall_device"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_firewall_device"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Device_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Device_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/firewall/firewall/zz_controller.go b/internal/controller/firewall/firewall/zz_controller.go index 5f76008..2075f2f 100755 --- a/internal/controller/firewall/firewall/zz_controller.go +++ b/internal/controller/firewall/firewall/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Firewall_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_firewall"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_firewall"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Firewall_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Firewall_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/image/image/zz_controller.go b/internal/controller/image/image/zz_controller.go index 4387ab2..8cb08a0 100755 --- a/internal/controller/image/image/zz_controller.go +++ b/internal/controller/image/image/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Image_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_image"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_image"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Image_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Image_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/instance/config/zz_controller.go b/internal/controller/instance/config/zz_controller.go index 78f851b..8eaca4a 100755 --- a/internal/controller/instance/config/zz_controller.go +++ b/internal/controller/instance/config/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Config_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_instance_config"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_instance_config"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Config_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Config_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/instance/disk/zz_controller.go b/internal/controller/instance/disk/zz_controller.go index c8b557f..50092f8 100755 --- a/internal/controller/instance/disk/zz_controller.go +++ b/internal/controller/instance/disk/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Disk_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_instance_disk"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_instance_disk"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Disk_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Disk_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/instance/instance/zz_controller.go b/internal/controller/instance/instance/zz_controller.go index 6280e18..d7153e7 100755 --- a/internal/controller/instance/instance/zz_controller.go +++ b/internal/controller/instance/instance/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Instance_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_instance"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_instance"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Instance_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Instance_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/instance/ip/zz_controller.go b/internal/controller/instance/ip/zz_controller.go index df387a2..5974d03 100755 --- a/internal/controller/instance/ip/zz_controller.go +++ b/internal/controller/instance/ip/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.IP_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_instance_ip"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_instance_ip"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.IP_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.IP_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/instance/sharedips/zz_controller.go b/internal/controller/instance/sharedips/zz_controller.go index 6e9be0e..19ce446 100755 --- a/internal/controller/instance/sharedips/zz_controller.go +++ b/internal/controller/instance/sharedips/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.SharedIPs_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_instance_shared_ips"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_instance_shared_ips"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SharedIPs_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.SharedIPs_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/ipv6/ipv6range/zz_controller.go b/internal/controller/ipv6/ipv6range/zz_controller.go index 85bcf66..1cc22b7 100755 --- a/internal/controller/ipv6/ipv6range/zz_controller.go +++ b/internal/controller/ipv6/ipv6range/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.IPv6Range_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_ipv6_range"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_ipv6_range"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.IPv6Range_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.IPv6Range_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/lke/cluster/zz_controller.go b/internal/controller/lke/cluster/zz_controller.go index 271f214..7a6ebce 100755 --- a/internal/controller/lke/cluster/zz_controller.go +++ b/internal/controller/lke/cluster/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Cluster_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_lke_cluster"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_lke_cluster"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Cluster_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Cluster_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/nodebalancer/config/zz_controller.go b/internal/controller/nodebalancer/config/zz_controller.go index 152451a..8fc371c 100755 --- a/internal/controller/nodebalancer/config/zz_controller.go +++ b/internal/controller/nodebalancer/config/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Config_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_nodebalancer_config"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_nodebalancer_config"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Config_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Config_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/nodebalancer/node/zz_controller.go b/internal/controller/nodebalancer/node/zz_controller.go index 919ab04..710ea21 100755 --- a/internal/controller/nodebalancer/node/zz_controller.go +++ b/internal/controller/nodebalancer/node/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Node_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_nodebalancer_node"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_nodebalancer_node"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Node_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Node_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/nodebalancer/nodebalancer/zz_controller.go b/internal/controller/nodebalancer/nodebalancer/zz_controller.go index 8e43cb9..a4b2ca9 100755 --- a/internal/controller/nodebalancer/nodebalancer/zz_controller.go +++ b/internal/controller/nodebalancer/nodebalancer/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Nodebalancer_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_nodebalancer"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_nodebalancer"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Nodebalancer_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Nodebalancer_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/objectstorage/bucket/zz_controller.go b/internal/controller/objectstorage/bucket/zz_controller.go index abc1acc..de8cbac 100755 --- a/internal/controller/objectstorage/bucket/zz_controller.go +++ b/internal/controller/objectstorage/bucket/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Bucket_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_object_storage_bucket"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_object_storage_bucket"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Bucket_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Bucket_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/objectstorage/key/zz_controller.go b/internal/controller/objectstorage/key/zz_controller.go index 09d1157..90aec5b 100755 --- a/internal/controller/objectstorage/key/zz_controller.go +++ b/internal/controller/objectstorage/key/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Key_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_object_storage_key"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_object_storage_key"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Key_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Key_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/objectstorage/object/zz_controller.go b/internal/controller/objectstorage/object/zz_controller.go index e45246b..457a8fe 100755 --- a/internal/controller/objectstorage/object/zz_controller.go +++ b/internal/controller/objectstorage/object/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Object_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_object_storage_object"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_object_storage_object"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Object_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Object_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/rdns/rdns/zz_controller.go b/internal/controller/rdns/rdns/zz_controller.go index e624bde..2e2ff86 100755 --- a/internal/controller/rdns/rdns/zz_controller.go +++ b/internal/controller/rdns/rdns/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.RDNS_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_rdns"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_rdns"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.RDNS_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.RDNS_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/sshkey/sshkey/zz_controller.go b/internal/controller/sshkey/sshkey/zz_controller.go index 0142e58..03b9e8a 100755 --- a/internal/controller/sshkey/sshkey/zz_controller.go +++ b/internal/controller/sshkey/sshkey/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.SSHKey_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_sshkey"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_sshkey"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SSHKey_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.SSHKey_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/stackscript/stackscript/zz_controller.go b/internal/controller/stackscript/stackscript/zz_controller.go index 07b3de7..26a4fad 100755 --- a/internal/controller/stackscript/stackscript/zz_controller.go +++ b/internal/controller/stackscript/stackscript/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Stackscript_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_stackscript"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_stackscript"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Stackscript_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Stackscript_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/token/token/zz_controller.go b/internal/controller/token/token/zz_controller.go index 981da0b..547d9d8 100755 --- a/internal/controller/token/token/zz_controller.go +++ b/internal/controller/token/token/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Token_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_token"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_token"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Token_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Token_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/user/user/zz_controller.go b/internal/controller/user/user/zz_controller.go index 8663510..32d9d81 100755 --- a/internal/controller/user/user/zz_controller.go +++ b/internal/controller/user/user/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.User_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_user"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_user"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.User_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.User_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/internal/controller/volume/volume/zz_controller.go b/internal/controller/volume/volume/zz_controller.go index 03c5823..327000a 100755 --- a/internal/controller/volume/volume/zz_controller.go +++ b/internal/controller/volume/volume/zz_controller.go @@ -29,19 +29,19 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { if o.SecretStoreConfigGVK != nil { cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK)) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Volume_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_volume"], + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["linode_volume"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Volume_GroupVersionKind))), )), 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.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Volume_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). diff --git a/package/crds/database.linode.upbound.io_accesscontrols.yaml b/package/crds/database.linode.upbound.io_accesscontrols.yaml index 77e69ae..1a5f8cd 100644 --- a/package/crds/database.linode.upbound.io_accesscontrols.yaml +++ b/package/crds/database.linode.upbound.io_accesscontrols.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: accesscontrols.database.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -82,11 +86,22 @@ spec: postgresql) The type of the database to manage the allow list for. type: string - required: - - allowList - - databaseId - - databaseType type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -258,11 +273,36 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: allowList is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.allowList) + - message: databaseId is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.databaseId) + - message: databaseType is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.databaseType) status: description: AccessControlsStatus defines the observed state of AccessControls. properties: atProvider: properties: + allowList: + description: A list of IP addresses that can access the Managed + Database. Each item can be a single IP address or a range in + CIDR format. A list of IP addresses that can access the Managed + Database. Each item can be a single IP address or a range in + CIDR format. + items: + type: string + type: array + databaseId: + description: The unique ID of the target database. The ID of the + database to manage the allow list for. + type: number + databaseType: + description: The unique type of the target database. (mysql, mongodb, + postgresql) The type of the database to manage the allow list + for. + type: string id: type: string type: object @@ -307,9 +347,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/database.linode.upbound.io_mongodbs.yaml b/package/crds/database.linode.upbound.io_mongodbs.yaml index f07f984..3d4bc68 100644 --- a/package/crds/database.linode.upbound.io_mongodbs.yaml +++ b/package/crds/database.linode.upbound.io_mongodbs.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: mongodbs.database.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -154,12 +158,22 @@ spec: - hourOfDay type: object type: array - required: - - engineId - - label - - region - - type type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -331,19 +345,57 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: engineId is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.engineId) + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) + - message: region is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region) + - message: type is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.type) status: description: MongoDBStatus defines the observed state of MongoDB. properties: atProvider: properties: + allowList: + description: A list of IP addresses that can access the Managed + Database. Each item can be a single IP address or a range in + CIDR format. Use linode_database_access_controls to manage your + allow list separately. A list of IP addresses that can access + the Managed Database. Each item can be a single IP address or + a range in CIDR format. + items: + type: string + type: array + clusterSize: + description: The number of Linode Instance nodes deployed to the + Managed Database. (default 1) The number of Linode Instance + nodes deployed to the Managed Database. Defaults to 1. + type: number + compressionType: + description: The type of data compression for this Database. (none, + snappy, zlib; default none) The type of data compression for + this Database. + type: string created: description: When this Managed Database was created. When this Managed Database was created. type: string + encrypted: + description: Whether the Managed Databases is encrypted. (default + false) Whether the Managed Databases is encrypted. + type: boolean engine: description: The Managed Database engine. (e.g. mongodb) The Managed Database engine. type: string + engineId: + description: The Managed Database engine in engine/version format. + (e.g. mongo/4.4.10) The Managed Database engine in engine/version + format. (e.g. mongodb/4.4.10) + type: string hostPrimary: description: The primary host for the Managed Database. The primary host for the Managed Database. @@ -355,6 +407,11 @@ spec: id: description: The ID of the Managed Database. type: string + label: + description: A unique, user-defined string referring to the Managed + Database. A unique, user-defined string referring to the Managed + Database. + type: string peers: description: A set of peer addresses for this Database. A set of peer addresses for this Database. @@ -365,6 +422,10 @@ spec: description: The access port for this Managed Database. The access port for this Managed Database. type: number + region: + description: The region to use for the Managed Database. The region + to use for the Managed Database. + type: string replicaSet: description: Label for configuring a MongoDB replica set. Choose the same label on multiple Databases to include them in the @@ -372,14 +433,61 @@ spec: Choose the same label on multiple Databases to include them in the same replica set. type: string + sslConnection: + description: Whether to require SSL credentials to establish a + connection to the Managed Database. (default false) Whether + to require SSL credentials to establish a connection to the + Managed Database. + type: boolean status: description: The operating status of the Managed Database. The operating status of the Managed Database. type: string + storageEngine: + description: The type of storage engine for this Database. (mmapv1, + wiredtiger; default wiredtiger) The type of storage engine for + this Database. + type: string + type: + description: The Linode Instance type used for the nodes of the Managed + Database instance. The Linode Instance type used by the Managed + Database for its nodes. + type: string updated: description: When this Managed Database was last updated. When this Managed Database was last updated. type: string + updates: + description: Configuration settings for automated patch update + maintenance for the Managed Database. + items: + properties: + dayOfWeek: + description: The day to perform maintenance. (monday, tuesday, + ...) The day to perform maintenance. + type: string + duration: + description: The maximum maintenance window time in hours. + (1..3) The maximum maintenance window time in hours. + type: number + frequency: + description: Whether maintenance occurs on a weekly or monthly + basis. (weekly, monthly) Whether maintenance occurs on + a weekly or monthly basis. + type: string + hourOfDay: + description: The hour to begin maintenance based in UTC + time. (0..23) The hour to begin maintenance based in UTC + time. + type: number + weekOfMonth: + description: The week of the month to perform monthly frequency + updates. Required for monthly frequency updates. (1..4) + The week of the month to perform monthly frequency updates. + Required for monthly frequency updates. + type: number + type: object + type: array version: description: The Managed Database engine version. (e.g. v8.0.26) The Managed Database engine version. @@ -426,9 +534,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/database.linode.upbound.io_mysqls.yaml b/package/crds/database.linode.upbound.io_mysqls.yaml index e0c1346..88d68de 100644 --- a/package/crds/database.linode.upbound.io_mysqls.yaml +++ b/package/crds/database.linode.upbound.io_mysqls.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: mysqls.database.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -149,12 +153,22 @@ spec: - hourOfDay type: object type: array - required: - - engineId - - label - - region - - type type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -326,19 +340,52 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: engineId is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.engineId) + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) + - message: region is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region) + - message: type is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.type) status: description: MySQLStatus defines the observed state of MySQL. properties: atProvider: properties: + allowList: + description: A list of IP addresses that can access the Managed + Database. Each item can be a single IP address or a range in + CIDR format. Use linode_database_access_controls to manage your + allow list separately. A list of IP addresses that can access + the Managed Database. Each item can be a single IP address or + a range in CIDR format. + items: + type: string + type: array + clusterSize: + description: The number of Linode Instance nodes deployed to the + Managed Database. (default 1) The number of Linode Instance + nodes deployed to the Managed Database. Defaults to 1. + type: number created: description: When this Managed Database was created. When this Managed Database was created. type: string + encrypted: + description: Whether the Managed Databases is encrypted. (default + false) Whether the Managed Databases is encrypted. + type: boolean engine: description: The Managed Database engine. (e.g. mysql) The Managed Database engine. type: string + engineId: + description: The Managed Database engine in engine/version format. + (e.g. mysql/8.0.26) The Managed Database engine in engine/version + format. (e.g. mysql/8.0.26) + type: string hostPrimary: description: The primary host for the Managed Database. The primary host for the Managed Database. @@ -350,14 +397,70 @@ spec: id: description: The ID of the Managed Database. type: string + label: + description: A unique, user-defined string referring to the Managed + Database. A unique, user-defined string referring to the Managed + Database. + type: string + region: + description: The region to use for the Managed Database. The region + to use for the Managed Database. + type: string + replicationType: + description: The replication method used for the Managed Database. + (none, asynch, semi_synch; default none) The replication method + used for the Managed Database. + type: string + sslConnection: + description: Whether to require SSL credentials to establish a + connection to the Managed Database. (default false) Whether + to require SSL credentials to establish a connection to the + Managed Database. + type: boolean status: description: The operating status of the Managed Database. The operating status of the Managed Database. type: string + type: + description: The Linode Instance type used for the nodes of the Managed + Database instance. The Linode Instance type used by the Managed + Database for its nodes. + type: string updated: description: When this Managed Database was last updated. When this Managed Database was last updated. type: string + updates: + description: Configuration settings for automated patch update + maintenance for the Managed Database. + items: + properties: + dayOfWeek: + description: The day to perform maintenance. (monday, tuesday, + ...) The day to perform maintenance. + type: string + duration: + description: The maximum maintenance window time in hours. + (1..3) The maximum maintenance window time in hours. + type: number + frequency: + description: Whether maintenance occurs on a weekly or monthly + basis. (weekly, monthly) Whether maintenance occurs on + a weekly or monthly basis. + type: string + hourOfDay: + description: The hour to begin maintenance based in UTC + time. (0..23) The hour to begin maintenance based in UTC + time. + type: number + weekOfMonth: + description: The week of the month to perform monthly frequency + updates. Required for monthly frequency updates. (1..4) + The week of the month to perform monthly frequency updates. + Required for monthly frequency updates. + type: number + type: object + type: array version: description: The Managed Database engine version. (e.g. v8.0.26) The Managed Database engine version. @@ -404,9 +507,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/database.linode.upbound.io_postgresqls.yaml b/package/crds/database.linode.upbound.io_postgresqls.yaml index 46547b1..7d420a8 100644 --- a/package/crds/database.linode.upbound.io_postgresqls.yaml +++ b/package/crds/database.linode.upbound.io_postgresqls.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: postgresqls.database.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -158,12 +162,22 @@ spec: - hourOfDay type: object type: array - required: - - engineId - - label - - region - - type type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -335,19 +349,52 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: engineId is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.engineId) + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) + - message: region is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region) + - message: type is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.type) status: description: PostgreSQLStatus defines the observed state of PostgreSQL. properties: atProvider: properties: + allowList: + description: A list of IP addresses that can access the Managed + Database. Each item can be a single IP address or a range in + CIDR format. Use linode_database_access_controls to manage your + allow list separately. A list of IP addresses that can access + the Managed Database. Each item can be a single IP address or + a range in CIDR format. + items: + type: string + type: array + clusterSize: + description: The number of Linode Instance nodes deployed to the + Managed Database. (default 1) The number of Linode Instance + nodes deployed to the Managed Database. Defaults to 1. + type: number created: description: When this Managed Database was created. When this Managed Database was created. type: string + encrypted: + description: Whether the Managed Databases is encrypted. (default + false) Whether the Managed Databases is encrypted. + type: boolean engine: description: The Managed Database engine. (e.g. postgresql) The Managed Database engine. type: string + engineId: + description: The Managed Database engine in engine/version format. + (e.g. postgresql/13.2) The Managed Database engine in engine/version + format. (e.g. mongodb/4.4.10) + type: string hostPrimary: description: The primary host for the Managed Database. The primary host for the Managed Database. @@ -359,17 +406,82 @@ spec: id: description: The ID of the Managed Database. type: string + label: + description: A unique, user-defined string referring to the Managed + Database. A unique, user-defined string referring to the Managed + Database. + type: string port: description: The access port for this Managed Database. type: number + region: + description: The region to use for the Managed Database. The region + to use for the Managed Database. + type: string + replicationCommitType: + description: The synchronization level of the replicating server. + (on, local, remote_write, remote_apply, off; default off) The + synchronization level of the replicating server.Must be `local` + or `off` for the `asynch` replication type. Must be `on`, `remote_write`, + or `remote_apply` for the `semi_synch` replication type. + type: string + replicationType: + description: The replication method used for the Managed Database. + (none, asynch, semi_synch; default none) The replication method + used for the Managed Database. Must be `none` for a single node + cluster. Must be `asynch` or `semi_synch` for a high availability + cluster. + type: string + sslConnection: + description: Whether to require SSL credentials to establish a + connection to the Managed Database. (default false) Whether + to require SSL credentials to establish a connection to the + Managed Database. + type: boolean status: description: The operating status of the Managed Database. The operating status of the Managed Database. type: string + type: + description: The Linode Instance type used for the nodes of the Managed + Database instance. The Linode Instance type used by the Managed + Database for its nodes. + type: string updated: description: When this Managed Database was last updated. When this Managed Database was last updated. type: string + updates: + description: Configuration settings for automated patch update + maintenance for the Managed Database. + items: + properties: + dayOfWeek: + description: The day to perform maintenance. (monday, tuesday, + ...) The day to perform maintenance. + type: string + duration: + description: The maximum maintenance window time in hours. + (1..3) The maximum maintenance window time in hours. + type: number + frequency: + description: Whether maintenance occurs on a weekly or monthly + basis. (weekly, monthly) Whether maintenance occurs on + a weekly or monthly basis. + type: string + hourOfDay: + description: The hour to begin maintenance based in UTC + time. (0..23) The hour to begin maintenance based in UTC + time. + type: number + weekOfMonth: + description: The week of the month to perform monthly frequency + updates. Required for monthly frequency updates. (1..4) + The week of the month to perform monthly frequency updates. + Required for monthly frequency updates. + type: number + type: object + type: array version: description: The Managed Database engine version. (e.g. 13.2) The Managed Database engine version. @@ -416,9 +528,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/domain.linode.upbound.io_domains.yaml b/package/crds/domain.linode.upbound.io_domains.yaml index 7ffb7a2..4c66a60 100644 --- a/package/crds/domain.linode.upbound.io_domains.yaml +++ b/package/crds/domain.linode.upbound.io_domains.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: domains.domain.linode.upbound.io spec: @@ -54,9 +54,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -137,10 +141,22 @@ spec: of information for the domain it describes, or if it is a read-only copy of a master (also called a slave). type: string - required: - - domain - - type type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -312,13 +328,92 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: domain is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.domain) + - message: type is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.type) status: description: DomainStatus defines the observed state of Domain. properties: atProvider: properties: + axfrIps: + description: The list of IPs that may perform a zone transfer + for this Domain. This is potentially dangerous, and should be + set to an empty list unless you intend to use it. + items: + type: string + type: array + description: + description: A description for this Domain. This is for display + purposes only. + type: string + domain: + description: The domain this Domain represents. These must be + unique in our system; you cannot have two Domains representing + the same domain. + type: string + expireSec: + description: The amount of time in seconds that may pass before + this Domain is no longer Valid values are 0, 30, 120, 300, 3600, + 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, + and 2419200 - any other value will be rounded to the nearest + valid value. + type: number + group: + description: The group this Domain belongs to. This is for display + purposes only. + type: string id: type: string + masterIps: + description: The IP addresses representing the master DNS for + this Domain. + items: + type: string + type: array + refreshSec: + description: The amount of time in seconds before this Domain + should be refreshed. Valid values are 0, 30, 120, 300, 3600, + 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, + and 2419200 - any other value will be rounded to the nearest + valid value. + type: number + retrySec: + description: The interval, in seconds, at which a failed refresh + should be retried. Valid values are 0, 30, 120, 300, 3600, 7200, + 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, + and 2419200 - any other value will be rounded to the nearest + valid value. + type: number + soaEmail: + description: Start of Authority email address. This is required + for master Domains. + type: string + status: + description: Used to control whether this Domain is currently + being rendered. + type: string + tags: + description: An array of tags applied to this object. Tags are + for organizational purposes only. + items: + type: string + type: array + ttlSec: + description: '''Time to Live'' - the amount of time in seconds + that this Domain''s records may be cached by resolvers or other + domain servers. Valid values are 0, 30, 120, 300, 3600, 7200, + 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, + and 2419200 - any other value will be rounded to the nearest + valid value.' + type: number + type: + description: If this Domain represents the authoritative source + of information for the domain it describes, or if it is a read-only + copy of a master (also called a slave). + type: string type: object conditions: description: Conditions of the resource. @@ -361,9 +456,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/domain.linode.upbound.io_records.yaml b/package/crds/domain.linode.upbound.io_records.yaml index 60cfc76..3e80d26 100644 --- a/package/crds/domain.linode.upbound.io_records.yaml +++ b/package/crds/domain.linode.upbound.io_records.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: records.domain.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -209,10 +213,22 @@ spec: are preferred. The relative weight of this Record. Higher values are preferred. type: number - required: - - recordType - - target type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -384,13 +400,90 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: recordType is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.recordType) + - message: target is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.target) status: description: RecordStatus defines the observed state of Record. properties: atProvider: properties: + domainId: + description: The ID of the Domain to access. Changing . The ID + of the Domain to access. + type: number id: type: string + name: + description: The name of this Record. Setting this is invalid + for SRV records as it is generated by the API. This field's + actual usage depends on the type of record this represents. + For A and AAAA records, this is the subdomain being associated + with an IP address. The name of this Record. This field's actual + usage depends on the type of record this represents. For A and + AAAA records, this is the subdomain being associated with an + IP address. Generated for SRV records. + type: string + port: + description: The port this Record points to. The port this Record + points to. + type: number + priority: + description: The priority of the target host. Lower values are + preferred. The priority of the target host. Lower values are + preferred. + type: number + protocol: + description: The protocol this Record's service communicates with. + Only valid for SRV records. The protocol this Record's service + communicates with. Only valid for SRV records. + type: string + recordType: + description: The type of Record this is in the DNS system. For + example, A records associate a domain name with an IPv4 address, + and AAAA records associate a domain name with an IPv6 address. + See all supported record types here. Changing . The type of + Record this is in the DNS system. For example, A records associate + a domain name with an IPv4 address, and AAAA records associate + a domain name with an IPv6 address. + type: string + service: + description: The service this Record identified. Only valid for + SRV records. The service this Record identified. Only valid + for SRV records. + type: string + tag: + description: The tag portion of a CAA record. It is invalid to + set this on other record types. The tag portion of a CAA record. + It is invalid to set this on other record types. + type: string + target: + description: The target for this Record. This field's actual usage + depends on the type of record this represents. For A and AAAA + records, this is the address the named Domain should resolve + to. The target for this Record. This field's actual usage depends + on the type of record this represents. For A and AAAA records, + this is the address the named Domain should resolve to. + type: string + ttlSec: + description: '''Time to Live'' - the amount of time in seconds + that this Domain''s records may be cached by resolvers or other + domain servers. Valid values are 30, 120, 300, 3600, 7200, 14400, + 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 + - any other value will be rounded to the nearest valid value. + ''Time to Live'' - the amount of time in seconds that this Domain''s + records may be cached by resolvers or other domain servers. + Valid values are 30, 120, 300, 3600, 7200, 14400, 28800, 57600, + 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other + value will be rounded to the nearest valid value.' + type: number + weight: + description: The relative weight of this Record. Higher values + are preferred. The relative weight of this Record. Higher values + are preferred. + type: number type: object conditions: description: Conditions of the resource. @@ -433,9 +526,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/firewall.linode.upbound.io_devices.yaml b/package/crds/firewall.linode.upbound.io_devices.yaml index 81e058a..5c776b3 100644 --- a/package/crds/firewall.linode.upbound.io_devices.yaml +++ b/package/crds/firewall.linode.upbound.io_devices.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: devices.firewall.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -223,6 +227,21 @@ spec: type: object type: object type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -403,6 +422,18 @@ spec: description: When the Firewall Device was last created. When this Firewall Device was created. type: string + entityId: + description: The unique ID of the entity to attach. The ID of + the entity to create a Firewall device for. + type: number + entityType: + description: 'The type of the entity to attach. (default: linode) + The type of the entity to create a Firewall device for.' + type: string + firewallId: + description: The unique ID of the target Firewall. The ID of the + Firewall to access. + type: number id: type: string updated: @@ -451,9 +482,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/firewall.linode.upbound.io_firewalls.yaml b/package/crds/firewall.linode.upbound.io_firewalls.yaml index a275bdb..178466a 100644 --- a/package/crds/firewall.linode.upbound.io_firewalls.yaml +++ b/package/crds/firewall.linode.upbound.io_firewalls.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: firewalls.firewall.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -273,11 +277,22 @@ spec: items: type: string type: array - required: - - inboundPolicy - - label - - outboundPolicy type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -449,6 +464,13 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: inboundPolicy is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.inboundPolicy) + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) + - message: outboundPolicy is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.outboundPolicy) status: description: FirewallStatus defines the observed state of Firewall. properties: @@ -477,12 +499,136 @@ spec: type: string type: object type: array + disabled: + description: If true, the Firewall's rules are not enforced (defaults + to false). If true, the Firewall is inactive. + type: boolean id: description: The ID of the Firewall. type: string + inbound: + description: A firewall rule that specifies what inbound network + traffic is allowed. + items: + properties: + action: + description: Controls whether traffic is accepted or dropped + by this rule (ACCEPT, DROP). Overrides the Firewall’s + inbound_policy if this is an inbound rule, or the outbound_policy + if this is an outbound rule. Controls whether traffic + is accepted or dropped by this rule. Overrides the Firewall’s + inbound_policy if this is an inbound rule, or the outbound_policy + if this is an outbound rule. + type: string + ipv4: + description: A list of IPv4 addresses or networks. Must + be in IP/mask format. A list of IP addresses, CIDR blocks, + or 0.0.0.0/0 (to allow all) this rule applies to. + items: + type: string + type: array + ipv6: + description: A list of IPv6 addresses or networks. Must + be in IP/mask format. A list of IPv6 addresses or networks + this rule applies to. + items: + type: string + type: array + label: + description: This Firewall's unique label. Used to identify + this rule. For display purposes only. + type: string + ports: + description: A string representation of ports and/or port + ranges (i.e. "443" or "80-90, 91"). A string representation + of ports and/or port ranges (i.e. "443" or "80-90, 91"). + type: string + protocol: + description: The network protocol this rule controls. (TCP, + UDP, ICMP) The network protocol this rule controls. + type: string + type: object + type: array + inboundPolicy: + description: The default behavior for inbound traffic. This setting + can be overridden by updating the inbound.action property of + the Firewall Rule. (ACCEPT, DROP) The default behavior for inbound + traffic. This setting can be overridden by updating the inbound.action + property for an individual Firewall Rule. + type: string + label: + description: This Firewall's unique label. The label for the Firewall. + For display purposes only. If no label is provided, a default + will be assigned. + type: string + linodes: + description: A list of IDs of Linodes this Firewall should govern + it's network traffic for. The IDs of Linodes to apply this firewall + to. + items: + type: number + type: array + outbound: + description: A firewall rule that specifies what outbound network + traffic is allowed. + items: + properties: + action: + description: Controls whether traffic is accepted or dropped + by this rule (ACCEPT, DROP). Overrides the Firewall’s + inbound_policy if this is an inbound rule, or the outbound_policy + if this is an outbound rule. Controls whether traffic + is accepted or dropped by this rule. Overrides the Firewall’s + inbound_policy if this is an inbound rule, or the outbound_policy + if this is an outbound rule. + type: string + ipv4: + description: A list of IPv4 addresses or networks. Must + be in IP/mask format. A list of IP addresses, CIDR blocks, + or 0.0.0.0/0 (to allow all) this rule applies to. + items: + type: string + type: array + ipv6: + description: A list of IPv6 addresses or networks. Must + be in IP/mask format. A list of IPv6 addresses or networks + this rule applies to. + items: + type: string + type: array + label: + description: This Firewall's unique label. Used to identify + this rule. For display purposes only. + type: string + ports: + description: A string representation of ports and/or port + ranges (i.e. "443" or "80-90, 91"). A string representation + of ports and/or port ranges (i.e. "443" or "80-90, 91"). + type: string + protocol: + description: The network protocol this rule controls. (TCP, + UDP, ICMP) The network protocol this rule controls. + type: string + type: object + type: array + outboundPolicy: + description: The default behavior for outbound traffic. This setting + can be overridden by updating the outbound.action property for + an individual Firewall Rule. (ACCEPT, DROP) The default behavior + for outbound traffic. This setting can be overridden by updating + the outbound.action property for an individual Firewall Rule. + type: string status: description: The status of the Firewall. The status of the firewall. type: string + tags: + description: A list of tags applied to the Kubernetes cluster. + Tags are for organizational purposes only. An array of tags + applied to this object. Tags are for organizational purposes + only. + items: + type: string + type: array type: object conditions: description: Conditions of the resource. @@ -525,9 +671,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/image.linode.upbound.io_images.yaml b/package/crds/image.linode.upbound.io_images.yaml index 72d3004..0726bec 100644 --- a/package/crds/image.linode.upbound.io_images.yaml +++ b/package/crds/image.linode.upbound.io_images.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: images.image.linode.upbound.io spec: @@ -54,9 +54,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -239,9 +243,22 @@ spec: description: The region of the image. See all regions here. The region to upload to. type: string - required: - - label type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -413,6 +430,9 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) status: description: ImageStatus defines the observed state of Image. properties: @@ -431,11 +451,28 @@ spec: be True for deprecated public Images. Whether or not this Image is deprecated. Will only be True for deprecated public Images. type: boolean + description: + description: A detailed description of this Image. A detailed + description of this Image. + type: string + diskId: + description: The ID of the Linode Disk that this Image will be + created from. The ID of the Linode Disk that this Image will + be created from. + type: number expiry: description: Only Images created automatically (from a deleted Linode; type=automatic) will expire. Only Images created automatically (from a deleted Linode; type=automatic) will expire. type: string + fileHash: + description: The MD5 hash of the file to be uploaded. This is + used to trigger file updates. The MD5 hash of the image file. + type: string + filePath: + description: The path of the image file to be uploaded. The name + of the file to upload to this image. + type: string id: description: The unique ID of this Image. The ID of private images begin with private/ followed by the numeric identifier of the @@ -445,6 +482,19 @@ spec: description: True if the Image is public. True if the Image is public. type: boolean + label: + description: A short description of the Image. Labels cannot contain + special characters. A short description of the Image. Labels + cannot contain special characters. + type: string + linodeId: + description: The ID of the Linode that this Image will be created + from. The ID of the Linode that this Image will be created from. + type: number + region: + description: The region of the image. See all regions here. The + region to upload to. + type: string size: description: The minimum size this Image needs to deploy. Size is in MB. The minimum size this Image needs to deploy. Size @@ -506,9 +556,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/instance.linode.upbound.io_configs.yaml b/package/crds/instance.linode.upbound.io_configs.yaml index 7bd4cbf..23a0b58 100644 --- a/package/crds/instance.linode.upbound.io_configs.yaml +++ b/package/crds/instance.linode.upbound.io_configs.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: configs.instance.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -1000,9 +1004,22 @@ spec: description: Controls the virtualization mode. (paravirt, fullvirt) Controls the virtualization mode. type: string - required: - - label type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -1174,13 +1191,253 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) status: description: ConfigStatus defines the observed state of Config. properties: atProvider: properties: + booted: + description: If true, the Linode will be booted into this config. + If another config is booted, the Linode will be rebooted into + this config. If false, the Linode will be shutdown only if it + is currently booted into this config. If undefined, the config + will alter the boot status of the Linode. If true, the Linode + will be booted to running state. If false, the Linode will be + shutdown. If undefined, no action will be taken. + type: boolean + comments: + description: Optional field for arbitrary User comments on this + Config. Optional field for arbitrary User comments on this Config. + type: string + devices: + description: A dictionary of device disks to use as a device map + in a Linode’s configuration profile. + items: + properties: + sda: + description: The SDA-SDH slots, represent the Linux block + device nodes for the first 8 disks attached to the Linode. Each + device must be suplied sequentially. The device can be + either a Disk or a Volume identified by disk_id or volume_id. + Only one disk identifier is permitted per slot. Devices + mapped from sde through sdh are unavailable in "fullvirt" + virt_mode. Device can be either a Disk or Volume identified + by disk_id or volume_id. Only one type per slot allowed. + items: + properties: + diskId: + description: The Disk ID to map to this device slot + The Disk ID to map to this disk slot + type: number + volumeId: + description: The Volume ID to map to this device slot. + The Block Storage volume ID to map to this disk + slot + type: number + type: object + type: array + sdb: + description: Device can be either a Disk or Volume identified + by disk_id or volume_id. Only one type per slot allowed. + items: + properties: + diskId: + description: The Disk ID to map to this device slot + The Disk ID to map to this disk slot + type: number + volumeId: + description: The Volume ID to map to this device slot. + The Block Storage volume ID to map to this disk + slot + type: number + type: object + type: array + sdc: + description: Device can be either a Disk or Volume identified + by disk_id or volume_id. Only one type per slot allowed. + items: + properties: + diskId: + description: The Disk ID to map to this device slot + The Disk ID to map to this disk slot + type: number + volumeId: + description: The Volume ID to map to this device slot. + The Block Storage volume ID to map to this disk + slot + type: number + type: object + type: array + sdd: + description: Device can be either a Disk or Volume identified + by disk_id or volume_id. Only one type per slot allowed. + items: + properties: + diskId: + description: The Disk ID to map to this device slot + The Disk ID to map to this disk slot + type: number + volumeId: + description: The Volume ID to map to this device slot. + The Block Storage volume ID to map to this disk + slot + type: number + type: object + type: array + sde: + description: Device can be either a Disk or Volume identified + by disk_id or volume_id. Only one type per slot allowed. + items: + properties: + diskId: + description: The Disk ID to map to this device slot + The Disk ID to map to this disk slot + type: number + volumeId: + description: The Volume ID to map to this device slot. + The Block Storage volume ID to map to this disk + slot + type: number + type: object + type: array + sdf: + description: Device can be either a Disk or Volume identified + by disk_id or volume_id. Only one type per slot allowed. + items: + properties: + diskId: + description: The Disk ID to map to this device slot + The Disk ID to map to this disk slot + type: number + volumeId: + description: The Volume ID to map to this device slot. + The Block Storage volume ID to map to this disk + slot + type: number + type: object + type: array + sdg: + description: Device can be either a Disk or Volume identified + by disk_id or volume_id. Only one type per slot allowed. + items: + properties: + diskId: + description: The Disk ID to map to this device slot + The Disk ID to map to this disk slot + type: number + volumeId: + description: The Volume ID to map to this device slot. + The Block Storage volume ID to map to this disk + slot + type: number + type: object + type: array + sdh: + description: Device can be either a Disk or Volume identified + by disk_id or volume_id. Only one type per slot allowed. + items: + properties: + diskId: + description: The Disk ID to map to this device slot + The Disk ID to map to this disk slot + type: number + volumeId: + description: The Volume ID to map to this device slot. + The Block Storage volume ID to map to this disk + slot + type: number + type: object + type: array + type: object + type: array + helpers: + description: Helpers enabled when booting to this Linode Config. + items: + properties: + devtmpfsAutomount: + description: Populates the /dev directory early during boot + without udev. (default true) Populates the /dev directory + early during boot without udev. + type: boolean + distro: + description: Helps maintain correct inittab/upstart console + device. (default true) Helps maintain correct inittab/upstart + console device. + type: boolean + modulesDep: + description: Creates a modules dependency file for the Kernel + you run. (default true) Creates a modules dependency file + for the Kernel you run. + type: boolean + network: + description: Automatically configures static networking. + (default true) Automatically configures static networking. + type: boolean + updatedbDisabled: + description: Disables updatedb cron job to avoid disk thrashing. + (default true) Disables updatedb cron job to avoid disk + thrashing. + type: boolean + type: object + type: array id: type: string + interface: + description: An array of Network Interfaces to add to this Linode’s + Configuration Profile. + items: + properties: + ipamAddress: + description: This Network Interface’s private IP address + in Classless Inter-Domain Routing (CIDR) notation. (e.g. + 10.0.0.1/24) This Network Interface’s private IP address + in Classless Inter-Domain Routing (CIDR) notation. + type: string + label: + description: The Config’s label for display purposes only. + The name of this interface. + type: string + purpose: + description: The type of interface. (public, vlan) The type + of interface. + type: string + type: object + type: array + kernel: + description: A Kernel ID to boot a Linode with. (default linode/latest-64bit) + A Kernel ID to boot a Linode with. Defaults to “linode/latest-64bit”. + type: string + label: + description: The Config’s label for display purposes only. The + Config’s label for display purposes only. + type: string + linodeId: + description: The ID of the Linode to create this configuration + profile under. The ID of the Linode to create this configuration + profile under. + type: number + memoryLimit: + description: The memory limit of the Config. Defaults to the total + ram of the Linode. The memory limit of the Linode. + type: number + rootDevice: + description: The root device to boot. (default /dev/sda) The root + device to boot. If no value or an invalid value is provided, + root device will default to /dev/sda. If the device specified + at the root device location is not mounted, the Linode will + not boot until a device is mounted. + type: string + runLevel: + description: Defines the state of your Linode after booting. (default, + single, binbash) Defines the state of your Linode after booting. + type: string + virtMode: + description: Controls the virtualization mode. (paravirt, fullvirt) + Controls the virtualization mode. + type: string type: object conditions: description: Conditions of the resource. @@ -1223,9 +1480,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/instance.linode.upbound.io_disks.yaml b/package/crds/instance.linode.upbound.io_disks.yaml index de62ddd..0173961 100644 --- a/package/crds/instance.linode.upbound.io_disks.yaml +++ b/package/crds/instance.linode.upbound.io_disks.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: disks.instance.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -295,10 +299,22 @@ spec: type: string type: object type: object - required: - - label - - size type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -470,16 +486,65 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) + - message: size is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.size) status: description: DiskStatus defines the observed state of Disk. properties: atProvider: properties: + authorizedKeys: + description: A list of public SSH keys that will be automatically + appended to the root user’s ~/.ssh/authorized_keys file when + deploying from an Image. A list of public SSH keys that will + be automatically appended to the root user’s ~/.ssh/authorized_keys + file when deploying from an Image. + items: + type: string + type: array + authorizedUsers: + description: A list of usernames. If the usernames have associated + SSH keys, the keys will be appended to the A list of usernames. + If the usernames have associated SSH keys, the keys will be + appended to the root users ~/.ssh/authorized_keys file automatically + when deploying from an Image. + items: + type: string + type: array created: description: When this disk was created. When this disk was created. type: string + filesystem: + description: The filesystem of this disk. (raw, swap, ext3, ext4, + initrd) The filesystem of this disk. + type: string id: type: string + image: + description: An Image ID to deploy the Linode Disk from. An Image + ID to deploy the Linode Disk from. + type: string + label: + description: The Disk's label for display purposes only. The Disk’s + label is for display purposes only. + type: string + linodeId: + description: The ID of the Linode to create this Disk under. The + ID of the Linode to assign this disk to. + type: number + size: + description: 'The size of the Disk in MB. NOTE: Resizing a disk + will trigger a Linode reboot. The size of the Disk in MB.' + type: number + stackscriptId: + description: A StackScript ID that will cause the referenced StackScript + to be run during deployment of this Disk. A StackScript ID that + will cause the referenced StackScript to be run during deployment + of this Linode. + type: number status: description: A brief description of this Disk's current state. A brief description of this Disk's current state. @@ -530,9 +595,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/instance.linode.upbound.io_instances.yaml b/package/crds/instance.linode.upbound.io_instances.yaml index c22974a..08ce042 100644 --- a/package/crds/instance.linode.upbound.io_instances.yaml +++ b/package/crds/instance.linode.upbound.io_instances.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: instances.instance.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -824,9 +828,22 @@ spec: responsible. To prevent a loop, Lassie will give up if there have been more than 5 boot jobs issued within 15 minutes. type: boolean - required: - - region type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -998,11 +1015,101 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: region is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region) status: description: InstanceStatus defines the observed state of Instance. properties: atProvider: properties: + alerts: + description: Configuration options for alert triggers on this + Linode. + items: + properties: + cpu: + description: The percentage of CPU usage required to trigger + an alert. If the average CPU usage over two hours exceeds + this value, we'll send you an alert. If this is set to + 0, the alert is disabled. The percentage of CPU usage + required to trigger an alert. If the average CPU usage + over two hours exceeds this value, we'll send you an alert. + If this is set to 0, the alert is disabled. + type: number + io: + description: The amount of disk IO operation per second + required to trigger an alert. If the average disk IO over + two hours exceeds this value, we'll send you an alert. + If set to 0, this alert is disabled. The amount of disk + IO operation per second required to trigger an alert. + If the average disk IO over two hours exceeds this value, + we'll send you an alert. If set to 0, this alert is disabled. + type: number + networkIn: + description: The amount of incoming traffic, in Mbit/s, + required to trigger an alert. If the average incoming + traffic over two hours exceeds this value, we'll send + you an alert. If this is set to 0 (zero), the alert is + disabled. The amount of incoming traffic, in Mbit/s, required + to trigger an alert. If the average incoming traffic over + two hours exceeds this value, we'll send you an alert. + If this is set to 0 (zero), the alert is disabled. + type: number + networkOut: + description: The amount of outbound traffic, in Mbit/s, + required to trigger an alert. If the average outbound + traffic over two hours exceeds this value, we'll send + you an alert. If this is set to 0 (zero), the alert is + disabled. The amount of outbound traffic, in Mbit/s, required + to trigger an alert. If the average outbound traffic over + two hours exceeds this value, we'll send you an alert. + If this is set to 0 (zero), the alert is disabled. + type: number + transferQuota: + description: The percentage of network transfer that may + be used before an alert is triggered. When this value + is exceeded, we'll alert you. If this is set to 0 (zero), + the alert is disabled. The percentage of network transfer + that may be used before an alert is triggered. When this + value is exceeded, we'll alert you. If this is set to + 0 (zero), the alert is disabled. + type: number + type: object + type: array + authorizedKeys: + description: A list of SSH public keys to deploy for the root + user on the newly created Linode. This value can not be imported. + Changing A list of SSH public keys to deploy for the root user + on the newly created Linode. Only accepted if 'image' is provided. + items: + type: string + type: array + authorizedUsers: + description: A list of Linode usernames. If the usernames have + associated SSH keys, the keys will be appended to the root user's + ~/.ssh/authorized_keys file automatically. This value can not + be imported. Changing A list of Linode usernames. If the usernames + have associated SSH keys, the keys will be appended to the `root` + user's `~/.ssh/authorized_keys` file automatically. Only accepted + if 'image' is provided. + items: + type: string + type: array + backupId: + description: A Backup ID from another Linode's available backups. + Your User must have read_write access to that Linode, the Backup + must have a status of successful, and the Linode must be deployed + to the same region as the Backup. See /linode/instances/{linodeId}/backups + for a Linode's available backups. This field and the image field + are mutually exclusive. This value can not be imported. Changing + A Backup ID from another Linode's available backups. Your User + must have read_write access to that Linode, the Backup must + have a status of successful, and the Linode must be deployed + to the same region as the Backup. See /linode/instances/{linodeId}/backups + for a Linode's available backups. This field and the image field + are mutually exclusive. + type: number backups: description: Information about this Linode's backups status. Information about this Linode's backups status. @@ -1042,96 +1149,600 @@ spec: type: array type: object type: array - disk: - description: The amount of storage space, in GB. this Linode has - access to. A typical Linode will divide this space between a - primary disk with an image deployed to it, and a swap disk, - usually 512 MB. This is the default configuration created when - deploying a Linode with an image through POST /linode/instances. - items: - properties: - id: - description: (Computed) The ID of the disk in the Linode - API. The ID of the Disk (for use in Linode Image resources - and Linode Instance Config Devices) - type: number - type: object - type: array - hostUuid: - description: (Computed) The ID of the disk in the Linode API. - The Linode’s host machine, as a UUID. - type: string - id: - description: (Computed) The ID of the disk in the Linode API. - type: string - ipAddress: - description: A string containing the Linode's public IP address. - This Linode's Public IPv4 Address. If there are multiple public - IPv4 addresses on this Instance, an arbitrary address will be - used for this field. - type: string - ipv4: - description: This Linode's IPv4 Addresses. Each Linode is assigned - a single public IPv4 address upon creation, and may get a single - private IPv4 address if needed. You may need to open a support - ticket to get additional IPv4 addresses. This Linode's IPv4 - Addresses. Each Linode is assigned a single public IPv4 address - upon creation, and may get a single private IPv4 address if - needed. You may need to open a support ticket to get additional - IPv4 addresses. - items: - type: string - type: array - ipv6: - description: This Linode's IPv6 SLAAC addresses. This address - is specific to a Linode, and may not be shared. The prefix - (/64) is included in this attribute. This Linode's IPv6 SLAAC - addresses. This address is specific to a Linode, and may not - be shared. - type: string - privateIpAddress: - description: This Linode's Private IPv4 Address, if enabled. The - regional private IP address range, 192.168.128.0/17, is shared - by all Linode Instances in a region. This Linode's Private IPv4 - Address. The regional private IP address range is 192.168.128/17 - address shared by all Linode Instances in a region. + backupsEnabled: + description: If this field is set to true, the created Linode + will automatically be enrolled in the Linode Backup service. + This will incur an additional charge. The cost for the Backup + service is dependent on the Type of Linode deployed. If this + field is set to true, the created Linode will automatically + be enrolled in the Linode Backup service. This will incur an + additional charge. The cost for the Backup service is dependent + on the Type of Linode deployed. + type: boolean + bootConfigLabel: + description: The Label of the Instance Config that should be used + to boot the Linode instance. If there is only one config, the + label of that config will be used as the boot_config_label. + This value can not be imported. The Label of the Instance Config + that should be used to boot the Linode instance. type: string - specs: - description: Information about the resources available to this - Linode. + booted: + description: If true, then the instance is kept or converted into + in a running state. If false, the instance will be shutdown. + If unspecified, the Linode's power status will not be managed + by the Provider. + type: boolean + config: + description: block Configuration profiles define the VM settings + and boot behavior of the Linode Instance. items: properties: - disk: - description: The amount of storage space, in GB. this Linode - has access to. A typical Linode will divide this space - between a primary disk with an image deployed to it, and - a swap disk, usually 512 MB. This is the default configuration - created when deploying a Linode with an image through - POST /linode/instances. - type: number - memory: - description: The amount of RAM, in MB, this Linode has access - to. Typically a Linode will choose to boot with all of - its available RAM, but this can be configured in a Config - profile. - type: number - transfer: - description: The amount of network transfer this Linode - is allotted each month. - type: number - vcpus: - description: The number of vcpus this Linode has access - to. Typically a Linode will choose to boot with all of - its available vcpus, but this can be configured in a Config - Profile. - type: number - type: object - type: array - status: - description: The status of the instance, indicating the current - readiness state. (running, offline, ...) The status of the instance, - indicating the current readiness state. - type: string + comments: + description: '- Arbitrary user comments about this config. + Optional field for arbitrary User comments on this Config.' + type: string + devices: + description: A list of disk or volume attachments for this + config. If the boot_config_label omits a devices block, + the Linode will not be booted. Device sda-sdh can be either + a Disk or Volume identified by disk_label or volume_id. + Only one type per slot allowed. + items: + properties: + sda: + description: The SDA-SDH slots, represent the Linux + block device nodes for the first 8 disks attached + to the Linode. Each device must be suplied sequentially. The + device can be either a Disk or a Volume identified + by disk_label or volume_id. Only one disk identifier + is permitted per slot. Devices mapped from sde through + sdh are unavailable in "fullvirt" virt_mode. Device + can be either a Disk or Volume identified by disk_id + or volume_id. Only one type per slot allowed. + items: + properties: + diskId: + description: (Computed) The Disk ID of the associated + disk_label, if used. The Disk ID to map to + this disk slot + type: number + diskLabel: + description: The label of the disk to map to + this device slot. The `label` of the `disk` + to map to this `device` slot. + type: string + volumeId: + description: The Volume ID to map to this device + slot. The Block Storage volume ID to map to + this disk slot + type: number + type: object + type: array + sdb: + description: Device can be either a Disk or Volume + identified by disk_id or volume_id. Only one type + per slot allowed. + items: + properties: + diskId: + description: (Computed) The Disk ID of the associated + disk_label, if used. The Disk ID to map to + this disk slot + type: number + diskLabel: + description: The label of the disk to map to + this device slot. The `label` of the `disk` + to map to this `device` slot. + type: string + volumeId: + description: The Volume ID to map to this device + slot. The Block Storage volume ID to map to + this disk slot + type: number + type: object + type: array + sdc: + description: Device can be either a Disk or Volume + identified by disk_id or volume_id. Only one type + per slot allowed. + items: + properties: + diskId: + description: (Computed) The Disk ID of the associated + disk_label, if used. The Disk ID to map to + this disk slot + type: number + diskLabel: + description: The label of the disk to map to + this device slot. The `label` of the `disk` + to map to this `device` slot. + type: string + volumeId: + description: The Volume ID to map to this device + slot. The Block Storage volume ID to map to + this disk slot + type: number + type: object + type: array + sdd: + description: Device can be either a Disk or Volume + identified by disk_id or volume_id. Only one type + per slot allowed. + items: + properties: + diskId: + description: (Computed) The Disk ID of the associated + disk_label, if used. The Disk ID to map to + this disk slot + type: number + diskLabel: + description: The label of the disk to map to + this device slot. The `label` of the `disk` + to map to this `device` slot. + type: string + volumeId: + description: The Volume ID to map to this device + slot. The Block Storage volume ID to map to + this disk slot + type: number + type: object + type: array + sde: + description: Device can be either a Disk or Volume + identified by disk_id or volume_id. Only one type + per slot allowed. + items: + properties: + diskId: + description: (Computed) The Disk ID of the associated + disk_label, if used. The Disk ID to map to + this disk slot + type: number + diskLabel: + description: The label of the disk to map to + this device slot. The `label` of the `disk` + to map to this `device` slot. + type: string + volumeId: + description: The Volume ID to map to this device + slot. The Block Storage volume ID to map to + this disk slot + type: number + type: object + type: array + sdf: + description: Device can be either a Disk or Volume + identified by disk_id or volume_id. Only one type + per slot allowed. + items: + properties: + diskId: + description: (Computed) The Disk ID of the associated + disk_label, if used. The Disk ID to map to + this disk slot + type: number + diskLabel: + description: The label of the disk to map to + this device slot. The `label` of the `disk` + to map to this `device` slot. + type: string + volumeId: + description: The Volume ID to map to this device + slot. The Block Storage volume ID to map to + this disk slot + type: number + type: object + type: array + sdg: + description: Device can be either a Disk or Volume + identified by disk_id or volume_id. Only one type + per slot allowed. + items: + properties: + diskId: + description: (Computed) The Disk ID of the associated + disk_label, if used. The Disk ID to map to + this disk slot + type: number + diskLabel: + description: The label of the disk to map to + this device slot. The `label` of the `disk` + to map to this `device` slot. + type: string + volumeId: + description: The Volume ID to map to this device + slot. The Block Storage volume ID to map to + this disk slot + type: number + type: object + type: array + sdh: + description: Device can be either a Disk or Volume + identified by disk_id or volume_id. Only one type + per slot allowed. + items: + properties: + diskId: + description: (Computed) The Disk ID of the associated + disk_label, if used. The Disk ID to map to + this disk slot + type: number + diskLabel: + description: The label of the disk to map to + this device slot. The `label` of the `disk` + to map to this `device` slot. + type: string + volumeId: + description: The Volume ID to map to this device + slot. The Block Storage volume ID to map to + this disk slot + type: number + type: object + type: array + type: object + type: array + helpers: + description: (Options) Helpers enabled when booting to this + Linode Config. Helpers enabled when booting to this Linode + Config. + items: + properties: + devtmpfsAutomount: + description: Populates the /dev directory early during + boot without udev. Defaults to false. + type: boolean + distro: + description: Controls the behavior of the Linode Config's + Distribution Helper setting. Controls the behavior + of the Linode Config's Distribution Helper setting. + type: boolean + modulesDep: + description: Creates a modules dependency file for + the Kernel you run. Creates a modules dependency + file for the Kernel you run. + type: boolean + network: + description: Controls the behavior of the Linode Config's + Network Helper setting, used to automatically configure + additional IP addresses assigned to this instance. + Controls the behavior of the Linode Config's Network + Helper setting, used to automatically configure + additional IP addresses assigned to this instance. + type: boolean + updatedbDisabled: + description: Disables updatedb cron job to avoid disk + thrashing. Disables updatedb cron job to avoid disk + thrashing. + type: boolean + type: object + type: array + interface: + description: An array of Network Interfaces for this Linode’s + Configuration Profile. + items: + properties: + ipamAddress: + description: This Network Interface’s private IP address + in Classless Inter-Domain Routing (CIDR) notation. + The IPAM Address of this interface. + type: string + label: + description: The Linode's label is for display purposes + only. If no label is provided for a Linode, a default + will be assigned. The unique label of this interface. + type: string + purpose: + description: The type of interface. (public, vlan) + The purpose of this interface. + type: string + type: object + type: array + kernel: + description: '- A Kernel ID to boot a Linode with. Default + is based on image choice. Examples are linode/latest-64bit, + linode/grub2, linode/direct-disk, etc. See all kernels + here. Note that this is a paginated API endpoint (docs). + A Kernel ID to boot a Linode with. Default is based on + image choice. (examples: linode/latest-64bit, linode/grub2, + linode/direct-disk)' + type: string + label: + description: The Linode's label is for display purposes + only. If no label is provided for a Linode, a default + will be assigned. The Config's label for display purposes. Also + used by `boot_config_label`. + type: string + memoryLimit: + description: '- Defaults to the total RAM of the Linode + Defaults to the total RAM of the Linode' + type: number + rootDevice: + description: '- The root device to boot. The corresponding + disk must be attached to a device slot. Example: "/dev/sda" + The root device to boot. The corresponding disk must be + attached.' + type: string + runLevel: + description: '- Defines the state of your Linode after booting. + Defaults to "default". Defines the state of your Linode + after booting. Defaults to default.' + type: string + virtMode: + description: '- Controls the virtualization mode. Defaults + to "paravirt". Controls the virtualization mode. Defaults + to paravirt.' + type: string + type: object + type: array + disk: + description: The amount of storage space, in GB. this Linode has + access to. A typical Linode will divide this space between a + primary disk with an image deployed to it, and a swap disk, + usually 512 MB. This is the default configuration created when + deploying a Linode with an image through POST /linode/instances. + items: + properties: + authorizedKeys: + description: A list of SSH public keys to deploy for the + root user on the newly created Linode. This value can + not be imported. Changing A list of SSH public keys to + deploy for the root user on the newly created Linode. + Only accepted if 'image' is provided. + items: + type: string + type: array + authorizedUsers: + description: A list of Linode usernames. If the usernames + have associated SSH keys, the keys will be appended to + the root user's ~/.ssh/authorized_keys file automatically. + This value can not be imported. Changing A list of Linode + usernames. If the usernames have associated SSH keys, + the keys will be appended to the `root` user's `~/.ssh/authorized_keys` + file automatically. Only accepted if 'image' is provided. + items: + type: string + type: array + filesystem: + description: 'The Disk filesystem can be one of: raw, swap, + ext3, ext4, initrd (max 32mb)' + type: string + id: + description: (Computed) The ID of the disk in the Linode + API. The ID of the Disk (for use in Linode Image resources + and Linode Instance Config Devices) + type: number + image: + description: An Image ID to deploy the Disk from. Official + Linode Images start with linode/, while your Images start + with private/. See images for more information on the + Images available for you to use. Examples are linode/debian9, + linode/fedora28, linode/ubuntu16.04lts, linode/arch, and + private/12345. See all images here (Requires a personal + access token; docs here). This value can not be imported. + Changing An Image ID to deploy the Disk from. Official + Linode Images start with linode/, while your Images start + with private/. + type: string + label: + description: The Linode's label is for display purposes + only. If no label is provided for a Linode, a default + will be assigned. + type: string + readOnly: + description: If true, this Disk is read-only. If true, this + Disk is read-only. + type: boolean + size: + description: The size of the Disk in MB. The size of the + Disk in MB. + type: number + stackscriptId: + description: The StackScript to deploy to the newly created + Linode. If provided, 'image' must also be provided, and + must be an Image that is compatible with this StackScript. + This value can not be imported. Changing The StackScript + to deploy to the newly created Linode. If provided, 'image' + must also be provided, and must be an Image that is compatible + with this StackScript. + type: number + type: object + type: array + group: + description: The display group of the Linode instance. The display + group of the Linode instance. + type: string + hostUuid: + description: (Computed) The ID of the disk in the Linode API. + The Linode’s host machine, as a UUID. + type: string + id: + description: (Computed) The ID of the disk in the Linode API. + type: string + image: + description: An Image ID to deploy the Disk from. Official Linode + Images start with linode/, while your Images start with private/. + See images for more information on the Images available for + you to use. Examples are linode/debian9, linode/fedora28, linode/ubuntu16.04lts, + linode/arch, and private/12345. See all images here (Requires + a personal access token; docs here). This value can not be imported. + Changing An Image ID to deploy the Disk from. Official Linode + Images start with linode/, while your Images start with private/. + See /images for more information on the Images available for + you to use. + type: string + interface: + description: An array of Network Interfaces for this Linode to + be created with. If an explicit config or disk is defined, interfaces + must be declared in the config block. + items: + properties: + ipamAddress: + description: This Network Interface’s private IP address + in Classless Inter-Domain Routing (CIDR) notation. The + IPAM Address of this interface. + type: string + label: + description: The Linode's label is for display purposes + only. If no label is provided for a Linode, a default + will be assigned. The unique label of this interface. + type: string + purpose: + description: The type of interface. (public, vlan) The purpose + of this interface. + type: string + type: object + type: array + ipAddress: + description: A string containing the Linode's public IP address. + This Linode's Public IPv4 Address. If there are multiple public + IPv4 addresses on this Instance, an arbitrary address will be + used for this field. + type: string + ipv4: + description: This Linode's IPv4 Addresses. Each Linode is assigned + a single public IPv4 address upon creation, and may get a single + private IPv4 address if needed. You may need to open a support + ticket to get additional IPv4 addresses. This Linode's IPv4 + Addresses. Each Linode is assigned a single public IPv4 address + upon creation, and may get a single private IPv4 address if + needed. You may need to open a support ticket to get additional + IPv4 addresses. + items: + type: string + type: array + ipv6: + description: This Linode's IPv6 SLAAC addresses. This address + is specific to a Linode, and may not be shared. The prefix + (/64) is included in this attribute. This Linode's IPv6 SLAAC + addresses. This address is specific to a Linode, and may not + be shared. + type: string + label: + description: The Linode's label is for display purposes only. + If no label is provided for a Linode, a default will be assigned. + The Linode's label is for display purposes only. If no label + is provided for a Linode, a default will be assigned + type: string + privateIp: + description: If true, the created Linode will have private networking + enabled, allowing use of the 192.168.128.0/17 network within + the Linode's region. It can be enabled on an existing Linode + but it can't be disabled. If true, the created Linode will have + private networking enabled, allowing use of the 192.168.128.0/17 + network within the Linode's region. + type: boolean + privateIpAddress: + description: This Linode's Private IPv4 Address, if enabled. The + regional private IP address range, 192.168.128.0/17, is shared + by all Linode Instances in a region. This Linode's Private IPv4 + Address. The regional private IP address range is 192.168.128/17 + address shared by all Linode Instances in a region. + type: string + region: + description: This is the location where the Linode is deployed. + Examples are "us-east", "us-west", "ap-south", etc. See all + regions here. Changing . This is the location where the Linode + was deployed. This cannot be changed without opening a support + ticket. + type: string + resizeDisk: + description: If true, changes in Linode type will attempt to upsize + or downsize implicitly created disks. This must be false if + explicit disks are defined. This is an irreversible action as + Linode disks cannot be automatically downsized. If true, changes + in Linode type will attempt to upsize or downsize implicitly + created disks. This must be false if explicit disks are defined. + This is an irreversible action as Linode disks cannot be automatically + downsized. + type: boolean + sharedIpv4: + description: A set of IPv4 addresses to be shared with the Instance. + These IP addresses can be both private and public, but must + be in the same region as the instance. A set of IPv4 addresses + to share with this Linode. + items: + type: string + type: array + specs: + description: Information about the resources available to this + Linode. + items: + properties: + disk: + description: The amount of storage space, in GB. this Linode + has access to. A typical Linode will divide this space + between a primary disk with an image deployed to it, and + a swap disk, usually 512 MB. This is the default configuration + created when deploying a Linode with an image through + POST /linode/instances. + type: number + memory: + description: The amount of RAM, in MB, this Linode has access + to. Typically a Linode will choose to boot with all of + its available RAM, but this can be configured in a Config + profile. + type: number + transfer: + description: The amount of network transfer this Linode + is allotted each month. + type: number + vcpus: + description: The number of vcpus this Linode has access + to. Typically a Linode will choose to boot with all of + its available vcpus, but this can be configured in a Config + Profile. + type: number + type: object + type: array + stackscriptId: + description: The StackScript to deploy to the newly created Linode. + If provided, 'image' must also be provided, and must be an Image + that is compatible with this StackScript. This value can not + be imported. Changing The StackScript to deploy to the newly + created Linode. If provided, 'image' must also be provided, + and must be an Image that is compatible with this StackScript. + type: number + status: + description: The status of the instance, indicating the current + readiness state. (running, offline, ...) The status of the instance, + indicating the current readiness state. + type: string + swapSize: + description: When deploying from an Image, this field is optional + with a Linode API default of 512mb, otherwise it is ignored. + This is used to set the swap disk size for the newly-created + Linode. When deploying from an Image, this field is optional + with a Linode API default of 512mb, otherwise it is ignored. + This is used to set the swap disk size for the newly-created + Linode. + type: number + tags: + description: A list of tags applied to this object. Tags are for + organizational purposes only. An array of tags applied to this + object. Tags are for organizational purposes only. + items: + type: string + type: array + type: + description: The Linode type defines the pricing, CPU, disk, and + RAM specs of the instance. Examples are "g6-nanode-1", "g6-standard-2", + "g6-highmem-16", "g6-dedicated-16", etc. See all types here. + The type of instance to be deployed, determining the price and + size. + type: string + watchdogEnabled: + description: The watchdog, named Lassie, is a Shutdown Watchdog + that monitors your Linode and will reboot it if it powers off + unexpectedly. It works by issuing a boot job when your Linode + powers off without a shutdown job being responsible. To prevent + a loop, Lassie will give up if there have been more than 5 boot + jobs issued within 15 minutes. The watchdog, named Lassie, is + a Shutdown Watchdog that monitors your Linode and will reboot + it if it powers off unexpectedly. It works by issuing a boot + job when your Linode powers off without a shutdown job being + responsible. To prevent a loop, Lassie will give up if there + have been more than 5 boot jobs issued within 15 minutes. + type: boolean type: object conditions: description: Conditions of the resource. @@ -1174,9 +1785,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/instance.linode.upbound.io_ips.yaml b/package/crds/instance.linode.upbound.io_ips.yaml index cc7f0a3..2ebe906 100644 --- a/package/crds/instance.linode.upbound.io_ips.yaml +++ b/package/crds/instance.linode.upbound.io_ips.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: ips.instance.linode.upbound.io spec: @@ -54,9 +54,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -227,6 +231,21 @@ spec: type: object type: object type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -406,16 +425,33 @@ spec: address: description: The resulting IPv4 address. The resulting IPv4 address. type: string + applyImmediately: + description: If true, the instance will be rebooted to update + network interfaces. If true, the instance will be rebooted to + update network interfaces. + type: boolean gateway: description: The default gateway for this address The default gateway for this address type: string id: type: string + linodeId: + description: The ID of the Linode to allocate an IPv4 address + for. The ID of the Linode to allocate an IPv4 address for. + type: number prefix: description: The number of bits set in the subnet mask. The number of bits set in the subnet mask. type: number + public: + description: Whether the IPv4 address is public or private. Defaults + to true. Whether the IPv4 address is public or private. + type: boolean + rdns: + description: The reverse DNS assigned to this address. The reverse + DNS assigned to this address. + type: string region: description: The region this IP resides in. The region this IP resides in. @@ -471,9 +507,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/instance.linode.upbound.io_sharedips.yaml b/package/crds/instance.linode.upbound.io_sharedips.yaml index 112fbb4..d5f9184 100644 --- a/package/crds/instance.linode.upbound.io_sharedips.yaml +++ b/package/crds/instance.linode.upbound.io_sharedips.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: sharedips.instance.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -147,9 +151,22 @@ spec: type: string type: object type: object - required: - - addresses type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -321,13 +338,26 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: addresses is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.addresses) status: description: SharedIPsStatus defines the observed state of SharedIPs. properties: atProvider: properties: + addresses: + description: The set of IPs to share with the Linode. A set of + IP addresses to share to the Linode + items: + type: string + type: array id: type: string + linodeId: + description: The ID of the Linode to share the IPs to. The ID + of the Linode to share these IP addresses with. + type: number type: object conditions: description: Conditions of the resource. @@ -370,9 +400,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/ipv6.linode.upbound.io_ipv6ranges.yaml b/package/crds/ipv6.linode.upbound.io_ipv6ranges.yaml index 0ada59a..2baf68b 100644 --- a/package/crds/ipv6.linode.upbound.io_ipv6ranges.yaml +++ b/package/crds/ipv6.linode.upbound.io_ipv6ranges.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: ipv6ranges.ipv6.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -150,9 +154,22 @@ spec: description: The IPv6 SLAAC address to assign this range to. The IPv6 SLAAC address to assign this range to. type: string - required: - - prefixLength type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -324,6 +341,9 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: prefixLength is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.prefixLength) status: description: IPv6RangeStatus defines the observed state of IPv6Range. properties: @@ -335,6 +355,11 @@ spec: description: Whether this IPv6 range is shared. Whether this IPv6 range is shared. type: boolean + linodeId: + description: The ID of the Linode to assign this range to. This + field may be updated to reassign the IPv6 range. The ID of the + Linode to assign this range to. + type: number linodes: description: A list of Linodes targeted by this IPv6 range. Includes Linodes with IP sharing. A list of Linodes targeted by this @@ -342,6 +367,10 @@ spec: items: type: number type: array + prefixLength: + description: The prefix length of the IPv6 range. The prefix length + of the IPv6 range. + type: number range: description: The IPv6 range of addresses in this pool. The IPv6 range of addresses in this pool. @@ -350,6 +379,10 @@ spec: description: The region for this range of IPv6 addresses. The region for this range of IPv6 addresses. type: string + routeTarget: + description: The IPv6 SLAAC address to assign this range to. The + IPv6 SLAAC address to assign this range to. + type: string type: object conditions: description: Conditions of the resource. @@ -392,9 +425,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/linode.upbound.io_providerconfigs.yaml b/package/crds/linode.upbound.io_providerconfigs.yaml index 2080699..d1471be 100644 --- a/package/crds/linode.upbound.io_providerconfigs.yaml +++ b/package/crds/linode.upbound.io_providerconfigs.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: providerconfigs.linode.upbound.io spec: @@ -151,9 +151,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/linode.upbound.io_providerconfigusages.yaml b/package/crds/linode.upbound.io_providerconfigusages.yaml index ea811b5..16976a3 100644 --- a/package/crds/linode.upbound.io_providerconfigusages.yaml +++ b/package/crds/linode.upbound.io_providerconfigusages.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: providerconfigusages.linode.upbound.io spec: @@ -109,9 +109,3 @@ spec: served: true storage: true subresources: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/linode.upbound.io_storeconfigs.yaml b/package/crds/linode.upbound.io_storeconfigs.yaml index 461f2da..e437808 100644 --- a/package/crds/linode.upbound.io_storeconfigs.yaml +++ b/package/crds/linode.upbound.io_storeconfigs.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: storeconfigs.linode.upbound.io spec: @@ -120,14 +120,45 @@ spec: required: - auth type: object + plugin: + description: Plugin configures External secret store as a plugin. + properties: + configRef: + description: ConfigRef contains store config reference info. + properties: + apiVersion: + description: APIVersion of the referenced config. + type: string + kind: + description: Kind of the referenced config. + type: string + name: + description: Name of the referenced config. + type: string + required: + - apiVersion + - kind + - name + type: object + endpoint: + description: Endpoint is the endpoint of the gRPC server. + type: string + type: object type: default: Kubernetes description: Type configures which secret store to be used. Only the configuration block for this store will be used and others will be ignored if provided. Default is Kubernetes. + enum: + - Kubernetes + - Vault + - Plugin type: string vault: - description: Vault configures a Vault secret store. + description: 'Vault configures a Vault secret store. Deprecated: This + API is scheduled to be removed in a future release. Vault should + be used as a plugin going forward. See https://github.com/crossplane-contrib/ess-plugin-vault + for more information.' properties: auth: description: Auth configures an authentication method for Vault. @@ -310,9 +341,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/lke.linode.upbound.io_clusters.yaml b/package/crds/lke.linode.upbound.io_clusters.yaml index 9e4ebdc..e05baf3 100644 --- a/package/crds/lke.linode.upbound.io_clusters.yaml +++ b/package/crds/lke.linode.upbound.io_clusters.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: clusters.lke.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -136,12 +140,22 @@ spec: items: type: string type: array - required: - - k8sVersion - - label - - pool - - region type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -313,6 +327,15 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: k8sVersion is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.k8sVersion) + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) + - message: pool is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.pool) + - message: region is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region) status: description: ClusterStatus defines the observed state of Cluster. properties: @@ -324,6 +347,18 @@ spec: items: type: string type: array + controlPlane: + description: Defines settings for the Kubernetes Control Plane. + items: + properties: + highAvailability: + description: Defines whether High Availability is enabled + for the cluster Control Plane. This is an irreversible + change. Defines whether High Availability is enabled for + the Control Plane Components of the cluster. + type: boolean + type: object + type: array dashboardUrl: description: The Kubernetes Dashboard access URL for this cluster. The dashboard URL of the cluster. @@ -331,11 +366,41 @@ spec: id: description: The ID of the cluster. type: string + k8sVersion: + description: The desired Kubernetes version for this Kubernetes + cluster in the format of major.minor (e.g. 1.21), and the latest + supported patch version will be deployed. The desired Kubernetes + version for this Kubernetes cluster in the format of .. + The latest supported patch version will be deployed. + type: string + label: + description: This Kubernetes cluster's unique label. The unique + label for the cluster. + type: string pool: description: 'Additional nested attributes: A node pool in the cluster.' items: properties: + autoscaler: + description: When specified, the number of nodes autoscales + within the defined minimum and maximum values. + items: + properties: + max: + description: The maximum number of nodes to autoscale + to. The maximum number of nodes to autoscale to. + type: number + min: + description: The minimum number of nodes to autoscale + to. The minimum number of nodes to autoscale to. + type: number + type: object + type: array + count: + description: The number of nodes in the Node Pool. The number + of nodes in the Node Pool. + type: number id: description: The ID of the cluster. The ID of the Node Pool. type: number @@ -354,11 +419,28 @@ spec: type: string type: object type: array + type: + description: A Linode Type for all of the nodes in the Node + Pool. See all node types here. A Linode Type for all of + the nodes in the Node Pool. + type: string type: object type: array + region: + description: This Kubernetes cluster's location. This cluster's + location. + type: string status: description: The status of the cluster. The status of the cluster. type: string + tags: + description: An array of tags applied to the Kubernetes cluster. + Tags are for organizational purposes only. An array of tags + applied to this object. Tags are for organizational purposes + only. + items: + type: string + type: array type: object conditions: description: Conditions of the resource. @@ -401,9 +483,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/nodebalancer.linode.upbound.io_configs.yaml b/package/crds/nodebalancer.linode.upbound.io_configs.yaml index 10be24b..cf5c0f7 100644 --- a/package/crds/nodebalancer.linode.upbound.io_configs.yaml +++ b/package/crds/nodebalancer.linode.upbound.io_configs.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: configs.nodebalancer.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -283,6 +287,21 @@ spec: is handled on this port: ''none'', ''table'', ''http_cookie''' type: string type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -459,6 +478,67 @@ spec: properties: atProvider: properties: + algorithm: + description: 'What algorithm this NodeBalancer should use for + routing traffic to backends. (roundrobin, leastconn, source) + What algorithm this NodeBalancer should use for routing traffic + to backends: roundrobin, leastconn, source' + type: string + check: + description: The type of check to perform against backends to + ensure they are serving requests. This is used to determine + if backends are up or down. If none no check is performed. connection + requires only a connection to the backend to succeed. http and + http_body rely on the backend serving HTTP, and that the response + returned matches what is expected. (none, connection, http, + http_body) The type of check to perform against backends to + ensure they are serving requests. This is used to determine + if backends are up or down. If none no check is performed. connection + requires only a connection to the backend to succeed. http and + http_body rely on the backend serving HTTP, and that the response + returned matches what is expected. + type: string + checkAttempts: + description: How many times to attempt a check before considering + a backend to be down. (1-30) How many times to attempt a check + before considering a backend to be down. (1-30) + type: number + checkBody: + description: This value must be present in the response body of + the check in order for it to pass. If this value is not present + in the response body of a check request, the backend is considered + to be down + type: string + checkInterval: + description: How often, in seconds, to check that backends are + up and serving requests. How often, in seconds, to check that + backends are up and serving requests. + type: number + checkPassive: + description: If true, any response from this backend with a 5xx + status code will be enough for it to be considered unhealthy + and taken out of rotation. If true, any response from this backend + with a 5xx status code will be enough for it to be considered + unhealthy and taken out of rotation. + type: boolean + checkPath: + description: The URL path to check on each backend. If the backend + does not respond to this request it is considered to be down. + The URL path to check on each backend. If the backend does not + respond to this request it is considered to be down. + type: string + checkTimeout: + description: How long, in seconds, to wait for a check attempt + before considering it failed. (1-30) How long, in seconds, to + wait for a check attempt before considering it failed. (1-30) + type: number + cipherSuite: + description: What ciphers to use for SSL connections served by + this NodeBalancer. legacy is considered insecure and should + only be used if necessary. What ciphers to use for SSL connections + served by this NodeBalancer. `legacy` is considered insecure + and should only be used if necessary. + type: string id: type: string nodeStatus: @@ -478,6 +558,40 @@ spec: type: number type: object type: array + nodebalancerId: + description: The ID of the NodeBalancer to access. The ID of the + NodeBalancer to access. + type: number + port: + description: The TCP port this Config is for. These values must + be unique across configs on a single NodeBalancer (you can't + have two configs for port 80, for example). While some ports + imply some protocols, no enforcement is done and you may configure + your NodeBalancer however is useful to you. For example, while + port 443 is generally used for HTTPS, you do not need SSL configured + to have a NodeBalancer listening on port 443. (Defaults to 80) + The TCP port this Config is for. These values must be unique + across configs on a single NodeBalancer (you can't have two + configs for port 80, for example). While some ports imply some + protocols, no enforcement is done and you may configure your + NodeBalancer however is useful to you. For example, while port + 443 is generally used for HTTPS, you do not need SSL configured + to have a NodeBalancer listening on port 443. + type: number + protocol: + description: The protocol this port is configured to serve. If + this is set to https you must include an ssl_cert and an ssl_key. + (http, https, tcp) (Defaults to http) The protocol this port + is configured to serve. If this is set to https you must include + an ssl_cert and an ssl_key. + type: string + proxyProtocol: + description: The version of ProxyProtocol to use for the underlying + NodeBalancer. This requires protocol to be tcp. (none, v1, v2) + (Defaults to none) The version of ProxyProtocol to use for the + underlying NodeBalancer. This requires protocol to be `tcp`. + Valid values are `none`, `v1`, and `v2`. + type: string sslCommonname: description: The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please @@ -496,6 +610,11 @@ spec: NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig. type: string + stickiness: + description: 'Controls how session stickiness is handled on this + port. (none, table, http_cookie) Controls how session stickiness + is handled on this port: ''none'', ''table'', ''http_cookie''' + type: string type: object conditions: description: Conditions of the resource. @@ -538,9 +657,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/nodebalancer.linode.upbound.io_nodebalancers.yaml b/package/crds/nodebalancer.linode.upbound.io_nodebalancers.yaml index 17ad58a..f1c52eb 100644 --- a/package/crds/nodebalancer.linode.upbound.io_nodebalancers.yaml +++ b/package/crds/nodebalancer.linode.upbound.io_nodebalancers.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: nodebalancers.nodebalancer.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -85,9 +89,22 @@ spec: items: type: string type: array - required: - - region type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -259,11 +276,19 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: region is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.region) status: description: NodebalancerStatus defines the observed state of Nodebalancer. properties: atProvider: properties: + clientConnThrottle: + description: Throttle connections per second (0-20). Set to 0 + (default) to disable throttling. Throttle connections per second + (0-20). Set to 0 (zero) to disable throttling. + type: number created: description: When this NodeBalancer was created When this NodeBalancer was created. @@ -282,6 +307,22 @@ spec: description: The Public IPv6 Address of this NodeBalancer The Public IPv6 Address of this NodeBalancer type: string + label: + description: The label of the Linode NodeBalancer The label of + the Linode NodeBalancer. + type: string + region: + description: The region where this NodeBalancer will be deployed. Examples + are "us-east", "us-west", "ap-south", etc. See all regions here. Changing + . The region where this NodeBalancer will be deployed. + type: string + tags: + description: A list of tags applied to this object. Tags are for + organizational purposes only. An array of tags applied to this + object. Tags are for organizational purposes only. + items: + type: string + type: array transfer: description: Information about the amount of transfer this NodeBalancer has had so far this month. @@ -347,9 +388,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/nodebalancer.linode.upbound.io_nodes.yaml b/package/crds/nodebalancer.linode.upbound.io_nodes.yaml index e63695d..1a5e396 100644 --- a/package/crds/nodebalancer.linode.upbound.io_nodes.yaml +++ b/package/crds/nodebalancer.linode.upbound.io_nodes.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: nodes.nodebalancer.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -250,10 +254,22 @@ spec: to serve a request and is not pinned to a single backend yet. Nodes with a higher weight will receive more traffic. (1-255) type: number - required: - - address - - label type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -425,19 +441,64 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: address is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.address) + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) status: description: NodeStatus defines the observed state of Node. properties: atProvider: properties: + address: + description: The private IP Address where this backend can be + reached. This must be a private IP address. The private IP Address + and port (IP:PORT) where this backend can be reached. This must + be a private IP address. + type: string + configId: + description: The ID of the NodeBalancerConfig to access. The ID + of the NodeBalancerConfig to access. + type: number id: type: string + label: + description: The label of the Linode NodeBalancer Node. This is + for display purposes only. The label for this node. This is + for display purposes only. + type: string + mode: + description: The mode this NodeBalancer should use when sending + traffic to this backend. If set to accept this backend is accepting + traffic. If set to reject this backend will not receive traffic. + If set to drain this backend will not receive new traffic, but + connections already pinned to it will continue to be routed + to it. (accept, reject, drain, backup) The mode this NodeBalancer + should use when sending traffic to this backend. If set to `accept` + this backend is accepting traffic. If set to `reject` this backend + will not receive traffic. If set to `drain` this backend will + not receive new traffic, but connections already pinned to it + will continue to be routed to it. If set to `backup` this backend + will only accept traffic if all other nodes are down. + type: string + nodebalancerId: + description: The ID of the NodeBalancer to access. The ID of the + NodeBalancer to access. + type: number status: description: The current status of this node, based on the configured checks of its NodeBalancer Config. (unknown, UP, DOWN). The current status of this node, based on the configured checks of its NodeBalancer Config. (unknown, UP, DOWN) type: string + weight: + description: Used when picking a backend to serve a request and + is not pinned to a single backend yet. Nodes with a higher weight + will receive more traffic. (1-255). Used when picking a backend + to serve a request and is not pinned to a single backend yet. + Nodes with a higher weight will receive more traffic. (1-255) + type: number type: object conditions: description: Conditions of the resource. @@ -480,9 +541,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/objectstorage.linode.upbound.io_buckets.yaml b/package/crds/objectstorage.linode.upbound.io_buckets.yaml index 066b3f9..c4cf164 100644 --- a/package/crds/objectstorage.linode.upbound.io_buckets.yaml +++ b/package/crds/objectstorage.linode.upbound.io_buckets.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: buckets.objectstorage.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -359,10 +363,22 @@ spec: however, suspend versioning on that bucket. (Requires access_key and secret_key) Whether to enable versioning. type: boolean - required: - - cluster - - label type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -534,11 +550,81 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: cluster is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.cluster) + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) status: description: BucketStatus defines the observed state of Bucket. properties: atProvider: properties: + accessKey: + description: The access key to authenticate with. The S3 access + key to use for this resource. (Required for lifecycle_rule and + versioning) + type: string + acl: + description: The Access Control Level of the bucket using a canned + ACL string. See all ACL strings in the Linode API v4 documentation. + The Access Control Level of the bucket using a canned ACL string. + type: string + cert: + description: The cert used by this Object Storage Bucket. + items: + properties: + certificateSecretRef: + description: The Base64 encoded and PEM formatted SSL certificate. + The Base64 encoded and PEM formatted SSL certificate. + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + privateKeySecretRef: + description: The private key associated with the TLS/SSL + certificate. The private key associated with the TLS/SSL + certificate. + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + required: + - certificateSecretRef + - privateKeySecretRef + type: object + type: array + cluster: + description: The cluster of the Linode Object Storage Bucket. + The cluster of the Linode Object Storage Bucket. + type: string + corsEnabled: + description: If true, the bucket will have CORS enabled for all + origins. If true, the bucket will be created with CORS enabled + for all origins. + type: boolean hostname: description: The hostname where this bucket can be accessed. This hostname can be accessed through a browser if the bucket is @@ -547,6 +633,86 @@ spec: id: description: The unique identifier for the rule. type: string + label: + description: The label of the Linode Object Storage Bucket. The + label of the Linode Object Storage Bucket. + type: string + lifecycleRule: + description: Lifecycle rules to be applied to the bucket. + items: + properties: + abortIncompleteMultipartUploadDays: + description: Specifies the number of days after initiating + a multipart upload when the multipart upload must be completed. + Specifies the number of days after initiating a multipart + upload when the multipart upload must be completed. + type: number + enabled: + description: Specifies whether the lifecycle rule is active. + Specifies whether the lifecycle rule is active. + type: boolean + expiration: + description: Specifies a period in the object's expire. + items: + properties: + date: + description: Specifies the date after which you want + the corresponding action to take effect. Specifies + the date after which you want the corresponding + action to take effect. + type: string + days: + description: Specifies the number of days after object + creation when the specific rule action takes effect. + Specifies the number of days after object creation + when the specific rule action takes effect. + type: number + expiredObjectDeleteMarker: + description: On a versioned bucket (versioning-enabled + or versioning-suspended bucket), you can add this + element in the lifecycle configuration to direct + Linode Object Storage to delete expired object delete + markers. This cannot be specified with Days or Date + in a Lifecycle Expiration Policy. Directs Linode + Object Storage to remove expired deleted markers. + type: boolean + type: object + type: array + id: + description: The unique identifier for the rule. The unique + identifier for the rule. + type: string + noncurrentVersionExpiration: + description: Specifies when non-current object versions + expire. + items: + properties: + days: + description: Specifies the number of days after object + creation when the specific rule action takes effect. + Specifies the number of days non-current object + versions expire. + type: number + type: object + type: array + prefix: + description: The object key prefix identifying one or more + objects to which the rule applies. The object key prefix + identifying one or more objects to which the rule applies. + type: string + type: object + type: array + secretKey: + description: The secret key to authenticate with. The S3 secret + key to use for this resource. (Required for lifecycle_rule and + versioning) + type: string + versioning: + description: Whether to enable versioning. Once you version-enable + a bucket, it can never return to an unversioned state. You can, + however, suspend versioning on that bucket. (Requires access_key + and secret_key) Whether to enable versioning. + type: boolean type: object conditions: description: Conditions of the resource. @@ -589,9 +755,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/objectstorage.linode.upbound.io_keys.yaml b/package/crds/objectstorage.linode.upbound.io_keys.yaml index 6742d69..989ca31 100644 --- a/package/crds/objectstorage.linode.upbound.io_keys.yaml +++ b/package/crds/objectstorage.linode.upbound.io_keys.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: keys.objectstorage.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -99,9 +103,22 @@ spec: description: The label given to this key. For display purposes only. The label given to this key. For display purposes only. type: string - required: - - label type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -273,13 +290,47 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) status: description: KeyStatus defines the observed state of Key. properties: atProvider: properties: + bucketAccess: + description: Defines this key as a Limited Access Key. Limited + Access Keys restrict this Object Storage key’s access to only + the bucket(s) declared in this array and define their bucket-level + permissions. Not providing this block will not limit this Object + Storage Key. A list of permissions to grant this limited access + key. + items: + properties: + bucketName: + description: The unique label of the bucket to which the + key will grant limited access. The unique label of the + bucket to which the key will grant limited access. + type: string + cluster: + description: The Object Storage cluster where a bucket to + which the key is granting access is hosted. The Object + Storage cluster where a bucket to which the key is granting + access is hosted. + type: string + permissions: + description: This Limited Access Key’s permissions for the + selected bucket. Changing (read_write, read_only) This + Limited Access Key’s permissions for the selected bucket. + type: string + type: object + type: array id: type: string + label: + description: The label given to this key. For display purposes + only. The label given to this key. For display purposes only. + type: string limited: description: Whether or not this key is a limited access key. Whether or not this key is a limited access key. @@ -326,9 +377,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/objectstorage.linode.upbound.io_objects.yaml b/package/crds/objectstorage.linode.upbound.io_objects.yaml index ef4ad23..a7084a4 100644 --- a/package/crds/objectstorage.linode.upbound.io_objects.yaml +++ b/package/crds/objectstorage.linode.upbound.io_objects.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: objects.objectstorage.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -299,11 +303,22 @@ spec: description: Specifies a target URL for website redirect. The website redirect location of this object. type: string - required: - - bucket - - cluster - - key type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -475,17 +490,113 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: bucket is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.bucket) + - message: cluster is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.cluster) + - message: key is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.key) status: description: ObjectStatus defines the observed state of Object. properties: atProvider: properties: + accessKey: + description: The access key to authenticate with. The S3 access + key with access to the target bucket. + type: string + acl: + description: The canned ACL to apply. (private, public-read, authenticated-read, + public-read-write, custom) (defaults to private). The ACL config + given to this object. + type: string + bucket: + description: The name of the bucket to put the object in. The + target bucket to put this object in. + type: string + cacheControl: + description: Specifies caching behavior along the request/reply + chain Read w3c cache_control for further details. This cache_control + configuration of this object. + type: string + cluster: + description: The cluster the bucket is in. The target cluster + that the bucket is in. + type: string + content: + description: Literal string value to use as the object content, + which will be uploaded as UTF-8-encoded text. The contents of + the Object to upload. + type: string + contentBase64: + description: Base64-encoded data that will be decoded and uploaded + as raw bytes for the object content. This allows safely uploading + non-UTF8 binary data, but is recommended only for small content + such as the result of the gzipbase64 function with small text + strings. For larger objects, use source to stream the content + from a disk file. The base64 contents of the Object to upload. + type: string + contentDisposition: + description: Specifies presentational information for the object. + Read w3c content_disposition for further information. The content + disposition configuration of this object. + type: string + contentEncoding: + description: Specifies what content encodings have been applied + to the object and thus what decoding mechanisms must be applied + to obtain the media-type referenced by the Content-Type header + field. Read w3c content encoding for further information. The + encoding of the content of this object. + type: string + contentLanguage: + description: The language the content is in e.g. en-US or en-GB. + The language metadata of this object. + type: string + contentType: + description: A standard MIME type describing the format of the + object data, e.g. application/octet-stream. All Valid MIME Types + are valid for this input. The MIME type of the content. + type: string + etag: + description: Used to trigger updates.11.11.11 or earlier). The + specific version of this object. + type: string + forceDestroy: + description: Allow the object to be deleted regardless of any + legal hold or object lock (defaults to false). Whether the object + should bypass deletion restrictions. + type: boolean id: type: string + key: + description: They name of the object once it is in the bucket. + The name of the uploaded object. + type: string + metadata: + additionalProperties: + type: string + description: A map of keys/values to provision metadata. The metadata + of this object + type: object + secretKey: + description: The secret key to authenitcate with. The S3 secret + key with access to the target bucket. + type: string + source: + description: The path to a file that will be read and uploaded + as raw bytes for the object content. The path must either be + relative to the root module or absolute. The source file to + upload. + type: string versionId: description: A unique version ID value for the object. The version ID of this object. type: string + websiteRedirect: + description: Specifies a target URL for website redirect. The + website redirect location of this object. + type: string type: object conditions: description: Conditions of the resource. @@ -528,9 +639,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/rdns.linode.upbound.io_rdns.yaml b/package/crds/rdns.linode.upbound.io_rdns.yaml index a5a4ce4..3d7423e 100644 --- a/package/crds/rdns.linode.upbound.io_rdns.yaml +++ b/package/crds/rdns.linode.upbound.io_rdns.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: rdns.rdns.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -79,10 +83,22 @@ spec: the operation timeout period. If true, the RDNS assignment will be retried within the operation timeout period. type: boolean - required: - - address - - rdns type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -254,13 +270,33 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: address is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.address) + - message: rdns is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.rdns) status: description: RDNSStatus defines the observed state of RDNS. properties: atProvider: properties: + address: + description: The Public IPv4 or IPv6 address that will receive + the PTR record. A matching A or AAAA record must exist. The + public Linode IPv4 or IPv6 address to operate on. + type: string id: type: string + rdns: + description: The name of the RDNS address. The reverse DNS assigned + to this address. For public IPv4 addresses, this will be set + to a default value provided by Linode if not explicitly set. + type: string + waitForAvailable: + description: If true, the RDNS assignment will be retried within + the operation timeout period. If true, the RDNS assignment will + be retried within the operation timeout period. + type: boolean type: object conditions: description: Conditions of the resource. @@ -303,9 +339,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/sshkey.linode.upbound.io_sshkeys.yaml b/package/crds/sshkey.linode.upbound.io_sshkeys.yaml index c8550d0..bd052a3 100644 --- a/package/crds/sshkey.linode.upbound.io_sshkeys.yaml +++ b/package/crds/sshkey.linode.upbound.io_sshkeys.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: sshkeys.sshkey.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -74,10 +78,22 @@ spec: which is used to authenticate to the root user of the Linodes you deploy. type: string - required: - - label - - sshKey type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -249,6 +265,11 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) + - message: sshKey is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.sshKey) status: description: SSHKeyStatus defines the observed state of SSHKey. properties: @@ -260,6 +281,16 @@ spec: type: string id: type: string + label: + description: A label for the SSH Key. The label of the Linode + SSH Key. + type: string + sshKey: + description: The public SSH Key, which is used to authenticate + to the root user of the Linodes you deploy. The public SSH Key, + which is used to authenticate to the root user of the Linodes + you deploy. + type: string type: object conditions: description: Conditions of the resource. @@ -302,9 +333,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/stackscript.linode.upbound.io_stackscripts.yaml b/package/crds/stackscript.linode.upbound.io_stackscripts.yaml index fc0d12c..3616ab4 100644 --- a/package/crds/stackscript.linode.upbound.io_stackscripts.yaml +++ b/package/crds/stackscript.linode.upbound.io_stackscripts.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: stackscripts.stackscript.linode.upbound.io spec: @@ -55,9 +55,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -131,12 +135,22 @@ spec: type: string type: object type: array - required: - - description - - images - - label - - script type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -308,6 +322,15 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: description is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.description) + - message: images is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.images) + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) + - message: script is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.script) status: description: StackscriptStatus defines the observed state of Stackscript. properties: @@ -327,12 +350,79 @@ spec: deployed. The total number of times this StackScript has been deployed. type: number + description: + description: A description for the StackScript. A description + for the StackScript. + type: string id: type: string + images: + description: An array of Image IDs representing the Images that + this StackScript is compatible for deploying with. any/all indicates + that all available image distributions, including private images, + are accepted. Currently private image IDs are not supported. + An array of Image IDs representing the Images that this StackScript + is compatible for deploying with. + items: + type: string + type: array + isPublic: + description: This determines whether other users can use your + StackScript. Once a StackScript is made public, it cannot be + made private. Changing This determines whether other users can + use your StackScript. Once a StackScript is made public, it + cannot be made private. + type: boolean + label: + description: The StackScript's label is for display purposes only. + The StackScript's label is for display purposes only. + type: string + revNote: + description: This field allows you to add notes for the set of + revisions made to this StackScript. This field allows you to + add notes for the set of revisions made to this StackScript. + type: string + script: + description: The script to execute when provisioning a new Linode + with this StackScript. The script to execute when provisioning + a new Linode with this StackScript. + type: string updated: description: The date this StackScript was updated. The date this StackScript was updated. type: string + userDefinedFields: + description: This is a list of fields defined with a special syntax + inside this StackScript that allow for supplying customized + parameters during deployment. This is a list of fields defined + with a special syntax inside this StackScript that allow for + supplying customized parameters during deployment. + items: + properties: + default: + description: The default value. If not specified, this value + will be used. + type: string + example: + description: An example value for the field. + type: string + label: + description: The StackScript's label is for display purposes + only. + type: string + manyOf: + description: A list of acceptable values for the field in + any quantity, combination or order. + type: string + name: + description: The name of the field. + type: string + oneOf: + description: A list of acceptable single values for the + field. + type: string + type: object + type: array userGravatarId: description: The Gravatar ID for the User who created the StackScript. The Gravatar ID for the User who created the StackScript. @@ -383,9 +473,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/token.linode.upbound.io_tokens.yaml b/package/crds/token.linode.upbound.io_tokens.yaml index ad8d2e1..ac898bb 100644 --- a/package/crds/token.linode.upbound.io_tokens.yaml +++ b/package/crds/token.linode.upbound.io_tokens.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: tokens.token.linode.upbound.io spec: @@ -54,9 +54,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -64,15 +68,15 @@ spec: forProvider: properties: expiry: - description: When this token will expire. Personal Access Tokens + description: 'When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. Tokens may - be created with 'null' as their expiry and will never expire + be created with ''null'' as their expiry and will never expire unless revoked. When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. - Tokens may be created with 'null' as their expiry and will never - expire unless revoked. + Tokens may be created with ''null'' as their expiry and will + never expire unless revoked. Format: 2006-01-02T15:04:05Z07:00' type: string label: description: A label for the Token. The label of the Linode Token. @@ -87,10 +91,26 @@ spec: of the Account the token can be used to access. Many command-line tools, such as the Linode CLI, require tokens with access to *. Tokens with more restrictive scopes are generally more secure. + Multiple scopes are separated by a space character (e.g., "databases:read_only + events:read_only"). You can find the list of available scopes + on Linode API docs site, https://www.linode.com/docs/api#oauth-reference type: string - required: - - scopes type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -262,6 +282,9 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: scopes is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.scopes) status: description: TokenStatus defines the observed state of Token. properties: @@ -271,8 +294,36 @@ spec: description: The date this Token was created. The date and time this token was created. type: string + expiry: + description: 'When this token will expire. Personal Access Tokens + cannot be renewed, so after this time the token will be completely + unusable and a new token will need to be generated. Tokens may + be created with ''null'' as their expiry and will never expire + unless revoked. When this token will expire. Personal Access + Tokens cannot be renewed, so after this time the token will + be completely unusable and a new token will need to be generated. + Tokens may be created with ''null'' as their expiry and will + never expire unless revoked. Format: 2006-01-02T15:04:05Z07:00' + type: string id: type: string + label: + description: A label for the Token. The label of the Linode Token. + type: string + scopes: + description: The scopes this token was created with. These define + what parts of the Account the token can be used to access. Many + command-line tools, such as the Linode CLI, require tokens with + access to *. Tokens with more restrictive scopes are generally + more secure. All scopes can be viewed in the Linode API documentation. + The scopes this token was created with. These define what parts + of the Account the token can be used to access. Many command-line + tools, such as the Linode CLI, require tokens with access to + *. Tokens with more restrictive scopes are generally more secure. + Multiple scopes are separated by a space character (e.g., "databases:read_only + events:read_only"). You can find the list of available scopes + on Linode API docs site, https://www.linode.com/docs/api#oauth-reference + type: string type: object conditions: description: Conditions of the resource. @@ -315,9 +366,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/user.linode.upbound.io_users.yaml b/package/crds/user.linode.upbound.io_users.yaml index daba45d..842bd2f 100644 --- a/package/crds/user.linode.upbound.io_users.yaml +++ b/package/crds/user.linode.upbound.io_users.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: users.user.linode.upbound.io spec: @@ -54,9 +54,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -283,10 +287,22 @@ spec: - permissions type: object type: array - required: - - email - - username type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -458,24 +474,225 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: email is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.email) + - message: username is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.username) status: description: UserStatus defines the observed state of User. properties: atProvider: properties: + domainGrant: + description: The domains the user has permissions access to. A + set containing all of the user's active grants. + items: + properties: + id: + description: The ID of the entity this grant applies to. + The ID of the entity this grant applies to. + type: number + permissions: + description: The level of access this User has to this entity. + (read_only, read_write) The level of access this User + has to this entity. If null, this User has no access. + type: string + type: object + type: array + email: + description: The email address of the user. The email of the user. + type: string + firewallGrant: + description: The firewalls the user has permissions access to. + A set containing all of the user's active grants. + items: + properties: + id: + description: The ID of the entity this grant applies to. + The ID of the entity this grant applies to. + type: number + permissions: + description: The level of access this User has to this entity. + (read_only, read_write) The level of access this User + has to this entity. If null, this User has no access. + type: string + type: object + type: array + globalGrants: + description: A structure containing the Account-level grants a + User has. + items: + properties: + accountAccess: + description: The level of access this User has to Account-level + actions, like billing information. A restricted User will + never be able to manage users. + type: string + addDatabases: + description: If true, this User may add Databases. If true, + this User may add Databases. + type: boolean + addDomains: + description: If true, this User may add Domains. If true, + this User may add Domains. + type: boolean + addFirewalls: + description: If true, this User may add Firewalls. If true, + this User may add Firewalls. + type: boolean + addImages: + description: If true, this User may add Images. If true, + this User may add Images. + type: boolean + addLinodes: + description: If true, this User may create Linodes. If true, + this User may create Linodes. + type: boolean + addLongview: + description: If true, this User may create Longview clients + and view the current plan. If true, this User may create + Longview clients and view the current plan. + type: boolean + addNodebalancers: + description: If true, this User may add NodeBalancers. If + true, this User may add NodeBalancers. + type: boolean + addStackscripts: + description: If true, this User may add StackScripts. If + true, this User may add StackScripts. + type: boolean + addVolumes: + description: If true, this User may add Volumes. + type: boolean + cancelAccount: + description: If true, this User may cancel the entire Account. + If true, this User may cancel the entire Account. + type: boolean + longviewSubscription: + description: If true, this User may manage the Account’s + Longview subscription. If true, this User may manage the + Account’s Longview subscription. + type: boolean + type: object + type: array id: description: The ID of the entity this grant applies to. type: string + imageGrant: + description: The images the user has permissions access to. A + set containing all of the user's active grants. + items: + properties: + id: + description: The ID of the entity this grant applies to. + The ID of the entity this grant applies to. + type: number + permissions: + description: The level of access this User has to this entity. + (read_only, read_write) The level of access this User + has to this entity. If null, this User has no access. + type: string + type: object + type: array + linodeGrant: + description: The Linodes the user has permissions access to. A + set containing all of the user's active grants. + items: + properties: + id: + description: The ID of the entity this grant applies to. + The ID of the entity this grant applies to. + type: number + permissions: + description: The level of access this User has to this entity. + (read_only, read_write) The level of access this User + has to this entity. If null, this User has no access. + type: string + type: object + type: array + longviewGrant: + description: The longview the user has permissions access to. + A set containing all of the user's active grants. + items: + properties: + id: + description: The ID of the entity this grant applies to. + The ID of the entity this grant applies to. + type: number + permissions: + description: The level of access this User has to this entity. + (read_only, read_write) The level of access this User + has to this entity. If null, this User has no access. + type: string + type: object + type: array + nodebalancerGrant: + description: The NodeBalancers the user has permissions access + to. A set containing all of the user's active grants. + items: + properties: + id: + description: The ID of the entity this grant applies to. + The ID of the entity this grant applies to. + type: number + permissions: + description: The level of access this User has to this entity. + (read_only, read_write) The level of access this User + has to this entity. If null, this User has no access. + type: string + type: object + type: array + restricted: + description: If true, this user will only have explicit permissions + granted. If true, the user must be explicitly granted access + to platform actions and entities. + type: boolean sshKeys: description: A list of the User's SSH keys. SSH keys to add to the user profile. items: type: string type: array + stackscriptGrant: + description: The StackScripts the user has permissions access + to. A set containing all of the user's active grants. + items: + properties: + id: + description: The ID of the entity this grant applies to. + The ID of the entity this grant applies to. + type: number + permissions: + description: The level of access this User has to this entity. + (read_only, read_write) The level of access this User + has to this entity. If null, this User has no access. + type: string + type: object + type: array tfaEnabled: description: Whether the user has two-factor-authentication enabled. If the User has Two Factor Authentication (TFA) enabled. type: boolean + username: + description: The username of the user. The username of the user. + type: string + volumeGrant: + description: The volumes the user has permissions access to. A + set containing all of the user's active grants. + items: + properties: + id: + description: The ID of the entity this grant applies to. + The ID of the entity this grant applies to. + type: number + permissions: + description: The level of access this User has to this entity. + (read_only, read_write) The level of access this User + has to this entity. If null, this User has no access. + type: string + type: object + type: array type: object conditions: description: Conditions of the resource. @@ -518,9 +735,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/package/crds/volume.linode.upbound.io_volumes.yaml b/package/crds/volume.linode.upbound.io_volumes.yaml index b0c49e8..ff28338 100644 --- a/package/crds/volume.linode.upbound.io_volumes.yaml +++ b/package/crds/volume.linode.upbound.io_volumes.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.11.3 creationTimestamp: null name: volumes.volume.linode.upbound.io spec: @@ -54,9 +54,13 @@ spec: properties: deletionPolicy: default: Delete - description: DeletionPolicy specifies what will happen to the underlying + description: 'DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" - or "Orphan" the external resource. + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicy 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 @@ -165,9 +169,22 @@ spec: items: type: string type: array - required: - - label type: object + managementPolicy: + default: FullControl + description: 'THIS IS AN ALPHA FIELD. Do not use it in production. + It is not honored unless the relevant Crossplane feature flag is + enabled, and may be changed or removed without notice. ManagementPolicy + specifies the level of control Crossplane has over the managed external + resource. 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. + 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: + - FullControl + - ObserveOnly + - OrphanOnDelete + type: string providerConfigRef: default: name: default @@ -339,6 +356,9 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: label is a required parameter + rule: self.managementPolicy == 'ObserveOnly' || has(self.forProvider.label) status: description: VolumeStatus defines the observed state of Volume. properties: @@ -353,11 +373,40 @@ spec: type: string id: type: string + label: + description: The label of the Linode Volume The label of the Linode + Volume. + type: string + linodeId: + description: The ID of a Linode Instance where the Volume should + be attached. The Linode ID where the Volume should be attached. + type: number + region: + description: The region where this volume will be deployed. Examples + are "us-east", "us-west", "ap-south", etc. See all regions here. + This field is optional for cloned volumes. Changing . The region + where this volume will be deployed. + type: string + size: + description: Size of the Volume in GB. Size of the Volume in GB + type: number + sourceVolumeId: + description: 'The ID of a Linode Volume to clone. NOTE: Cloned + volumes must be in the same region as the source volume. The + ID of a volume to clone.' + type: number status: description: The status of the Linode Volume. (creating, active, resizing, contact_support) The status of the volume, indicating the current readiness state. type: string + tags: + description: A list of tags applied to this object. Tags are for + organizational purposes only. An array of tags applied to this + object. Tags are for organizational purposes only. + items: + type: string + type: array type: object conditions: description: Conditions of the resource. @@ -400,9 +449,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: []