diff --git a/Makefile b/Makefile index 67103f7..551e040 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ PROJECT_REPO := github.com/linode/$(PROJECT_NAME) export TERRAFORM_VERSION := 1.5.5 export TERRAFORM_PROVIDER_SOURCE := linode/linode -export TERRAFORM_PROVIDER_VERSION := 2.9.3 +export TERRAFORM_PROVIDER_VERSION := 2.16.0 export TERRAFORM_PROVIDER_DOWNLOAD_NAME := terraform-provider-linode export TERRAFORM_NATIVE_PROVIDER_BINARY := terraform-provider-linode_v$(TERRAFORM_PROVIDER_VERSION) export TERRAFORM_PROVIDER_REPO := https://github.com/linode/terraform-provider-linode diff --git a/apis/firewall/v1alpha1/zz_firewall_types.go b/apis/firewall/v1alpha1/zz_firewall_types.go index 7bff734..7f95cd5 100755 --- a/apis/firewall/v1alpha1/zz_firewall_types.go +++ b/apis/firewall/v1alpha1/zz_firewall_types.go @@ -84,7 +84,7 @@ type FirewallInitParameters struct { // 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"` - // A list of tags applied to the Kubernetes cluster. Tags are for organizational purposes only. + // A list of tags applied to the Kubernetes cluster. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` @@ -137,7 +137,7 @@ type FirewallObservation struct { // 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. + // A list of tags applied to the Kubernetes cluster. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` @@ -197,7 +197,7 @@ type FirewallParameters struct { // +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. + // A list of tags applied to the Kubernetes cluster. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +kubebuilder:validation:Optional // +listType=set diff --git a/apis/instance/v1alpha1/zz_config_types.go b/apis/instance/v1alpha1/zz_config_types.go index d1f8fdf..985ebe2 100755 --- a/apis/instance/v1alpha1/zz_config_types.go +++ b/apis/instance/v1alpha1/zz_config_types.go @@ -205,7 +205,7 @@ type ConfigInitParameters_2 struct { // An array of Network Interfaces to add to this Linode's Configuration Profile. Interface []ConfigInterfaceInitParameters `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. Default is linode/latest-64bit. 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. Defaults to “linode/latest-64bit”. Kernel *string `json:"kernel,omitempty" tf:"kernel,omitempty"` @@ -243,52 +243,146 @@ type ConfigInitParameters_2 struct { VirtMode *string `json:"virtMode,omitempty" tf:"virt_mode,omitempty"` } +type ConfigInterfaceIPv4InitParameters struct { + + // The public IP that will be used for the one-to-one NAT purpose. If this is any, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address. + // The public IP that will be used for the one-to-one NAT purpose. + NAT11 *string `json:"nat11,omitempty" tf:"nat_1_1,omitempty"` + + // purpose. + // The IP from the VPC subnet to use for this interface. + VPC *string `json:"vpc,omitempty" tf:"vpc,omitempty"` +} + +type ConfigInterfaceIPv4Observation struct { + + // The public IP that will be used for the one-to-one NAT purpose. If this is any, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address. + // The public IP that will be used for the one-to-one NAT purpose. + NAT11 *string `json:"nat11,omitempty" tf:"nat_1_1,omitempty"` + + // purpose. + // The IP from the VPC subnet to use for this interface. + VPC *string `json:"vpc,omitempty" tf:"vpc,omitempty"` +} + +type ConfigInterfaceIPv4Parameters struct { + + // The public IP that will be used for the one-to-one NAT purpose. If this is any, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address. + // The public IP that will be used for the one-to-one NAT purpose. + // +kubebuilder:validation:Optional + NAT11 *string `json:"nat11,omitempty" tf:"nat_1_1,omitempty"` + + // purpose. + // The IP from the VPC subnet to use for this interface. + // +kubebuilder:validation:Optional + VPC *string `json:"vpc,omitempty" tf:"vpc,omitempty"` +} + type ConfigInterfaceInitParameters 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. + // IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program. + // List of VPC IPs or IP ranges inside the VPC subnet. + IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` + + // The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces. + IPv4 []ConfigInterfaceIPv4InitParameters `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) This field is only allowed for interfaces with the vlan purpose. + // This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces. IpamAddress *string `json:"ipamAddress,omitempty" tf:"ipam_address,omitempty"` // The Config’s label for display purposes only. - // The name of this interface. + // The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces. Label *string `json:"label,omitempty" tf:"label,omitempty"` - // The type of interface. (public, vlan) + // Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the public or vpc purpose. + // Whether the interface is the primary interface that should have the default route for this Linode. + Primary *bool `json:"primary,omitempty" tf:"primary,omitempty"` + + // The type of interface. (public, vlan, vpc) // The type of interface. Purpose *string `json:"purpose,omitempty" tf:"purpose,omitempty"` + + // The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the vpc purpose. + // The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces. + SubnetID *float64 `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` } 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. + // Whether this interface is currently booted and active. + Active *bool `json:"active,omitempty" tf:"active,omitempty"` + + // The ID of the interface. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program. + // List of VPC IPs or IP ranges inside the VPC subnet. + IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` + + // The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces. + IPv4 []ConfigInterfaceIPv4Observation `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) This field is only allowed for interfaces with the vlan purpose. + // This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces. IpamAddress *string `json:"ipamAddress,omitempty" tf:"ipam_address,omitempty"` // The Config’s label for display purposes only. - // The name of this interface. + // The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces. Label *string `json:"label,omitempty" tf:"label,omitempty"` - // The type of interface. (public, vlan) + // Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the public or vpc purpose. + // Whether the interface is the primary interface that should have the default route for this Linode. + Primary *bool `json:"primary,omitempty" tf:"primary,omitempty"` + + // The type of interface. (public, vlan, vpc) // The type of interface. Purpose *string `json:"purpose,omitempty" tf:"purpose,omitempty"` + + // The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the vpc purpose. + // The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces. + SubnetID *float64 `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` + + // The ID of VPC which this interface is attached to. + // The ID of VPC of the subnet which the VPC interface is connected to. + VPCID *float64 `json:"vpcId,omitempty" tf:"vpc_id,omitempty"` } type ConfigInterfaceParameters 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. + // IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program. + // List of VPC IPs or IP ranges inside the VPC subnet. + // +kubebuilder:validation:Optional + IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` + + // The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces. + // +kubebuilder:validation:Optional + IPv4 []ConfigInterfaceIPv4Parameters `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) This field is only allowed for interfaces with the vlan purpose. + // This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces. // +kubebuilder:validation:Optional IpamAddress *string `json:"ipamAddress,omitempty" tf:"ipam_address,omitempty"` // The Config’s label for display purposes only. - // The name of this interface. + // The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces. // +kubebuilder:validation:Optional Label *string `json:"label,omitempty" tf:"label,omitempty"` - // The type of interface. (public, vlan) + // Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the public or vpc purpose. + // Whether the interface is the primary interface that should have the default route for this Linode. + // +kubebuilder:validation:Optional + Primary *bool `json:"primary,omitempty" tf:"primary,omitempty"` + + // The type of interface. (public, vlan, vpc) // The type of interface. // +kubebuilder:validation:Optional Purpose *string `json:"purpose" tf:"purpose,omitempty"` + + // The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the vpc purpose. + // The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces. + // +kubebuilder:validation:Optional + SubnetID *float64 `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` } type ConfigObservation_2 struct { @@ -315,7 +409,7 @@ type ConfigObservation_2 struct { // 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. Default is linode/latest-64bit. 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. Defaults to “linode/latest-64bit”. Kernel *string `json:"kernel,omitempty" tf:"kernel,omitempty"` @@ -372,7 +466,7 @@ type ConfigParameters_2 struct { // +kubebuilder:validation:Optional Interface []ConfigInterfaceParameters `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. Default is linode/latest-64bit. 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. Defaults to “linode/latest-64bit”. // +kubebuilder:validation:Optional Kernel *string `json:"kernel,omitempty" tf:"kernel,omitempty"` diff --git a/apis/instance/v1alpha1/zz_disk_types.go b/apis/instance/v1alpha1/zz_disk_types.go index 6d21e0f..9be57bd 100755 --- a/apis/instance/v1alpha1/zz_disk_types.go +++ b/apis/instance/v1alpha1/zz_disk_types.go @@ -19,12 +19,12 @@ import ( type DiskInitParameters_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. (Requires 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. // +listType=set 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 user's ~/.ssh/authorized_keys file. (Requires image) // 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. // +listType=set AuthorizedUsers []*string `json:"authorizedUsers,omitempty" tf:"authorized_users,omitempty"` @@ -58,7 +58,7 @@ type DiskInitParameters_2 struct { // 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 Disk. (Requires image) // A StackScript ID that will cause the referenced StackScript to be run during deployment of this Linode. // +crossplane:generate:reference:type=github.com/linode/provider-linode/apis/stackscript/v1alpha1.Stackscript StackscriptID *float64 `json:"stackscriptId,omitempty" tf:"stackscript_id,omitempty"` @@ -74,12 +74,12 @@ type DiskInitParameters_2 struct { 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. (Requires 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. // +listType=set 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 user's ~/.ssh/authorized_keys file. (Requires image) // 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. // +listType=set AuthorizedUsers []*string `json:"authorizedUsers,omitempty" tf:"authorized_users,omitempty"` @@ -110,7 +110,7 @@ type DiskObservation_2 struct { // 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 Disk. (Requires image) // 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"` @@ -125,13 +125,13 @@ type DiskObservation_2 struct { type DiskParameters_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. (Requires 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. // +kubebuilder:validation:Optional // +listType=set 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 user's ~/.ssh/authorized_keys file. (Requires image) // 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. // +kubebuilder:validation:Optional // +listType=set @@ -166,7 +166,7 @@ type DiskParameters_2 struct { // +kubebuilder:validation:Optional LinodeIDSelector *v1.Selector `json:"linodeIdSelector,omitempty" tf:"-"` - // The root user’s password on a newly-created Linode Disk when deploying from an Image. + // The root user’s password on a newly-created Linode Disk when deploying from an Image. (Requires image) // This sets the root user’s password on a newly-created Linode Disk when deploying from an Image. // +kubebuilder:validation:Optional RootPassSecretRef *v1.SecretKeySelector `json:"rootPassSecretRef,omitempty" tf:"-"` @@ -176,12 +176,12 @@ type DiskParameters_2 struct { // +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. (Requires image) // 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. // +kubebuilder:validation:Optional StackscriptDataSecretRef *v1.SecretReference `json:"stackscriptDataSecretRef,omitempty" tf:"-"` - // 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 Disk. (Requires image) // A StackScript ID that will cause the referenced StackScript to be run during deployment of this Linode. // +crossplane:generate:reference:type=github.com/linode/provider-linode/apis/stackscript/v1alpha1.Stackscript // +kubebuilder:validation:Optional diff --git a/apis/instance/v1alpha1/zz_generated.deepcopy.go b/apis/instance/v1alpha1/zz_generated.deepcopy.go index a00a9d4..956916a 100644 --- a/apis/instance/v1alpha1/zz_generated.deepcopy.go +++ b/apis/instance/v1alpha1/zz_generated.deepcopy.go @@ -724,9 +724,102 @@ func (in *ConfigInitParameters_2) DeepCopy() *ConfigInitParameters_2 { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfigInterfaceIPv4InitParameters) DeepCopyInto(out *ConfigInterfaceIPv4InitParameters) { + *out = *in + if in.NAT11 != nil { + in, out := &in.NAT11, &out.NAT11 + *out = new(string) + **out = **in + } + if in.VPC != nil { + in, out := &in.VPC, &out.VPC + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigInterfaceIPv4InitParameters. +func (in *ConfigInterfaceIPv4InitParameters) DeepCopy() *ConfigInterfaceIPv4InitParameters { + if in == nil { + return nil + } + out := new(ConfigInterfaceIPv4InitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfigInterfaceIPv4Observation) DeepCopyInto(out *ConfigInterfaceIPv4Observation) { + *out = *in + if in.NAT11 != nil { + in, out := &in.NAT11, &out.NAT11 + *out = new(string) + **out = **in + } + if in.VPC != nil { + in, out := &in.VPC, &out.VPC + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigInterfaceIPv4Observation. +func (in *ConfigInterfaceIPv4Observation) DeepCopy() *ConfigInterfaceIPv4Observation { + if in == nil { + return nil + } + out := new(ConfigInterfaceIPv4Observation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfigInterfaceIPv4Parameters) DeepCopyInto(out *ConfigInterfaceIPv4Parameters) { + *out = *in + if in.NAT11 != nil { + in, out := &in.NAT11, &out.NAT11 + *out = new(string) + **out = **in + } + if in.VPC != nil { + in, out := &in.VPC, &out.VPC + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigInterfaceIPv4Parameters. +func (in *ConfigInterfaceIPv4Parameters) DeepCopy() *ConfigInterfaceIPv4Parameters { + if in == nil { + return nil + } + out := new(ConfigInterfaceIPv4Parameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConfigInterfaceInitParameters) DeepCopyInto(out *ConfigInterfaceInitParameters) { *out = *in + if in.IPRanges != nil { + in, out := &in.IPRanges, &out.IPRanges + *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.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *out = make([]ConfigInterfaceIPv4InitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.IpamAddress != nil { in, out := &in.IpamAddress, &out.IpamAddress *out = new(string) @@ -737,11 +830,21 @@ func (in *ConfigInterfaceInitParameters) DeepCopyInto(out *ConfigInterfaceInitPa *out = new(string) **out = **in } + if in.Primary != nil { + in, out := &in.Primary, &out.Primary + *out = new(bool) + **out = **in + } if in.Purpose != nil { in, out := &in.Purpose, &out.Purpose *out = new(string) **out = **in } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigInterfaceInitParameters. @@ -757,6 +860,34 @@ func (in *ConfigInterfaceInitParameters) DeepCopy() *ConfigInterfaceInitParamete // 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.Active != nil { + in, out := &in.Active, &out.Active + *out = new(bool) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.IPRanges != nil { + in, out := &in.IPRanges, &out.IPRanges + *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.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *out = make([]ConfigInterfaceIPv4Observation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.IpamAddress != nil { in, out := &in.IpamAddress, &out.IpamAddress *out = new(string) @@ -767,11 +898,26 @@ func (in *ConfigInterfaceObservation) DeepCopyInto(out *ConfigInterfaceObservati *out = new(string) **out = **in } + if in.Primary != nil { + in, out := &in.Primary, &out.Primary + *out = new(bool) + **out = **in + } if in.Purpose != nil { in, out := &in.Purpose, &out.Purpose *out = new(string) **out = **in } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(float64) + **out = **in + } + if in.VPCID != nil { + in, out := &in.VPCID, &out.VPCID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigInterfaceObservation. @@ -787,6 +933,24 @@ func (in *ConfigInterfaceObservation) DeepCopy() *ConfigInterfaceObservation { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConfigInterfaceParameters) DeepCopyInto(out *ConfigInterfaceParameters) { *out = *in + if in.IPRanges != nil { + in, out := &in.IPRanges, &out.IPRanges + *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.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *out = make([]ConfigInterfaceIPv4Parameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.IpamAddress != nil { in, out := &in.IpamAddress, &out.IpamAddress *out = new(string) @@ -797,11 +961,21 @@ func (in *ConfigInterfaceParameters) DeepCopyInto(out *ConfigInterfaceParameters *out = new(string) **out = **in } + if in.Primary != nil { + in, out := &in.Primary, &out.Primary + *out = new(bool) + **out = **in + } if in.Purpose != nil { in, out := &in.Purpose, &out.Purpose *out = new(string) **out = **in } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigInterfaceParameters. @@ -868,6 +1042,11 @@ func (in *ConfigObservation) DeepCopyInto(out *ConfigObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } if in.Interface != nil { in, out := &in.Interface, &out.Interface *out = make([]InterfaceObservation, len(*in)) @@ -3150,6 +3329,13 @@ func (in *IPObservation) DeepCopyInto(out *IPObservation) { *out = new(string) **out = **in } + if in.VPCNAT11 != nil { + in, out := &in.VPCNAT11, &out.VPCNAT11 + *out = make([]VPCNAT11Observation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPObservation. @@ -3252,6 +3438,81 @@ func (in *IPStatus) DeepCopy() *IPStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IPv4InitParameters) DeepCopyInto(out *IPv4InitParameters) { + *out = *in + if in.NAT11 != nil { + in, out := &in.NAT11, &out.NAT11 + *out = new(string) + **out = **in + } + if in.VPC != nil { + in, out := &in.VPC, &out.VPC + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPv4InitParameters. +func (in *IPv4InitParameters) DeepCopy() *IPv4InitParameters { + if in == nil { + return nil + } + out := new(IPv4InitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IPv4Observation) DeepCopyInto(out *IPv4Observation) { + *out = *in + if in.NAT11 != nil { + in, out := &in.NAT11, &out.NAT11 + *out = new(string) + **out = **in + } + if in.VPC != nil { + in, out := &in.VPC, &out.VPC + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPv4Observation. +func (in *IPv4Observation) DeepCopy() *IPv4Observation { + if in == nil { + return nil + } + out := new(IPv4Observation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IPv4Parameters) DeepCopyInto(out *IPv4Parameters) { + *out = *in + if in.NAT11 != nil { + in, out := &in.NAT11, &out.NAT11 + *out = new(string) + **out = **in + } + if in.VPC != nil { + in, out := &in.VPC, &out.VPC + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPv4Parameters. +func (in *IPv4Parameters) DeepCopy() *IPv4Parameters { + if in == nil { + return nil + } + out := new(IPv4Parameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Instance) DeepCopyInto(out *Instance) { *out = *in @@ -3345,6 +3606,11 @@ func (in *InstanceInitParameters) DeepCopyInto(out *InstanceInitParameters) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.FirewallID != nil { + in, out := &in.FirewallID, &out.FirewallID + *out = new(float64) + **out = **in + } if in.Group != nil { in, out := &in.Group, &out.Group *out = new(string) @@ -3374,6 +3640,11 @@ func (in *InstanceInitParameters) DeepCopyInto(out *InstanceInitParameters) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.MigrationType != nil { + in, out := &in.MigrationType, &out.MigrationType + *out = new(string) + **out = **in + } if in.PrivateIP != nil { in, out := &in.PrivateIP, &out.PrivateIP *out = new(bool) @@ -3456,6 +3727,24 @@ func (in *InstanceInitParameters) DeepCopy() *InstanceInitParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InstanceInterfaceInitParameters) DeepCopyInto(out *InstanceInterfaceInitParameters) { *out = *in + if in.IPRanges != nil { + in, out := &in.IPRanges, &out.IPRanges + *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.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *out = make([]InterfaceIPv4InitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.IpamAddress != nil { in, out := &in.IpamAddress, &out.IpamAddress *out = new(string) @@ -3466,11 +3755,21 @@ func (in *InstanceInterfaceInitParameters) DeepCopyInto(out *InstanceInterfaceIn *out = new(string) **out = **in } + if in.Primary != nil { + in, out := &in.Primary, &out.Primary + *out = new(bool) + **out = **in + } if in.Purpose != nil { in, out := &in.Purpose, &out.Purpose *out = new(string) **out = **in } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceInterfaceInitParameters. @@ -3486,6 +3785,34 @@ func (in *InstanceInterfaceInitParameters) DeepCopy() *InstanceInterfaceInitPara // 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.Active != nil { + in, out := &in.Active, &out.Active + *out = new(bool) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.IPRanges != nil { + in, out := &in.IPRanges, &out.IPRanges + *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.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *out = make([]InterfaceIPv4Observation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.IpamAddress != nil { in, out := &in.IpamAddress, &out.IpamAddress *out = new(string) @@ -3496,11 +3823,26 @@ func (in *InstanceInterfaceObservation) DeepCopyInto(out *InstanceInterfaceObser *out = new(string) **out = **in } + if in.Primary != nil { + in, out := &in.Primary, &out.Primary + *out = new(bool) + **out = **in + } if in.Purpose != nil { in, out := &in.Purpose, &out.Purpose *out = new(string) **out = **in } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(float64) + **out = **in + } + if in.VPCID != nil { + in, out := &in.VPCID, &out.VPCID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceInterfaceObservation. @@ -3516,6 +3858,24 @@ func (in *InstanceInterfaceObservation) DeepCopy() *InstanceInterfaceObservation // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InstanceInterfaceParameters) DeepCopyInto(out *InstanceInterfaceParameters) { *out = *in + if in.IPRanges != nil { + in, out := &in.IPRanges, &out.IPRanges + *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.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *out = make([]InterfaceIPv4Parameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.IpamAddress != nil { in, out := &in.IpamAddress, &out.IpamAddress *out = new(string) @@ -3526,11 +3886,21 @@ func (in *InstanceInterfaceParameters) DeepCopyInto(out *InstanceInterfaceParame *out = new(string) **out = **in } + if in.Primary != nil { + in, out := &in.Primary, &out.Primary + *out = new(bool) + **out = **in + } if in.Purpose != nil { in, out := &in.Purpose, &out.Purpose *out = new(string) **out = **in } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceInterfaceParameters. @@ -3648,6 +4018,11 @@ func (in *InstanceObservation) DeepCopyInto(out *InstanceObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.FirewallID != nil { + in, out := &in.FirewallID, &out.FirewallID + *out = new(float64) + **out = **in + } if in.Group != nil { in, out := &in.Group, &out.Group *out = new(string) @@ -3713,6 +4088,11 @@ func (in *InstanceObservation) DeepCopyInto(out *InstanceObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.MigrationType != nil { + in, out := &in.MigrationType, &out.MigrationType + *out = new(string) + **out = **in + } if in.PrivateIP != nil { in, out := &in.PrivateIP, &out.PrivateIP *out = new(bool) @@ -3865,6 +4245,11 @@ func (in *InstanceParameters) DeepCopyInto(out *InstanceParameters) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.FirewallID != nil { + in, out := &in.FirewallID, &out.FirewallID + *out = new(float64) + **out = **in + } if in.Group != nil { in, out := &in.Group, &out.Group *out = new(string) @@ -3894,6 +4279,11 @@ func (in *InstanceParameters) DeepCopyInto(out *InstanceParameters) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.MigrationType != nil { + in, out := &in.MigrationType, &out.MigrationType + *out = new(string) + **out = **in + } if in.PrivateIP != nil { in, out := &in.PrivateIP, &out.PrivateIP *out = new(bool) @@ -4018,9 +4408,102 @@ func (in *InstanceStatus) DeepCopy() *InstanceStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InterfaceIPv4InitParameters) DeepCopyInto(out *InterfaceIPv4InitParameters) { + *out = *in + if in.NAT11 != nil { + in, out := &in.NAT11, &out.NAT11 + *out = new(string) + **out = **in + } + if in.VPC != nil { + in, out := &in.VPC, &out.VPC + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceIPv4InitParameters. +func (in *InterfaceIPv4InitParameters) DeepCopy() *InterfaceIPv4InitParameters { + if in == nil { + return nil + } + out := new(InterfaceIPv4InitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InterfaceIPv4Observation) DeepCopyInto(out *InterfaceIPv4Observation) { + *out = *in + if in.NAT11 != nil { + in, out := &in.NAT11, &out.NAT11 + *out = new(string) + **out = **in + } + if in.VPC != nil { + in, out := &in.VPC, &out.VPC + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceIPv4Observation. +func (in *InterfaceIPv4Observation) DeepCopy() *InterfaceIPv4Observation { + if in == nil { + return nil + } + out := new(InterfaceIPv4Observation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InterfaceIPv4Parameters) DeepCopyInto(out *InterfaceIPv4Parameters) { + *out = *in + if in.NAT11 != nil { + in, out := &in.NAT11, &out.NAT11 + *out = new(string) + **out = **in + } + if in.VPC != nil { + in, out := &in.VPC, &out.VPC + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceIPv4Parameters. +func (in *InterfaceIPv4Parameters) DeepCopy() *InterfaceIPv4Parameters { + if in == nil { + return nil + } + out := new(InterfaceIPv4Parameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InterfaceInitParameters) DeepCopyInto(out *InterfaceInitParameters) { *out = *in + if in.IPRanges != nil { + in, out := &in.IPRanges, &out.IPRanges + *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.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *out = make([]IPv4InitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.IpamAddress != nil { in, out := &in.IpamAddress, &out.IpamAddress *out = new(string) @@ -4031,11 +4514,21 @@ func (in *InterfaceInitParameters) DeepCopyInto(out *InterfaceInitParameters) { *out = new(string) **out = **in } + if in.Primary != nil { + in, out := &in.Primary, &out.Primary + *out = new(bool) + **out = **in + } if in.Purpose != nil { in, out := &in.Purpose, &out.Purpose *out = new(string) **out = **in } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceInitParameters. @@ -4051,6 +4544,34 @@ func (in *InterfaceInitParameters) DeepCopy() *InterfaceInitParameters { // 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.Active != nil { + in, out := &in.Active, &out.Active + *out = new(bool) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.IPRanges != nil { + in, out := &in.IPRanges, &out.IPRanges + *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.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *out = make([]IPv4Observation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.IpamAddress != nil { in, out := &in.IpamAddress, &out.IpamAddress *out = new(string) @@ -4061,11 +4582,26 @@ func (in *InterfaceObservation) DeepCopyInto(out *InterfaceObservation) { *out = new(string) **out = **in } + if in.Primary != nil { + in, out := &in.Primary, &out.Primary + *out = new(bool) + **out = **in + } if in.Purpose != nil { in, out := &in.Purpose, &out.Purpose *out = new(string) **out = **in } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(float64) + **out = **in + } + if in.VPCID != nil { + in, out := &in.VPCID, &out.VPCID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceObservation. @@ -4081,6 +4617,24 @@ func (in *InterfaceObservation) DeepCopy() *InterfaceObservation { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InterfaceParameters) DeepCopyInto(out *InterfaceParameters) { *out = *in + if in.IPRanges != nil { + in, out := &in.IPRanges, &out.IPRanges + *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.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *out = make([]IPv4Parameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.IpamAddress != nil { in, out := &in.IpamAddress, &out.IpamAddress *out = new(string) @@ -4091,11 +4645,21 @@ func (in *InterfaceParameters) DeepCopyInto(out *InterfaceParameters) { *out = new(string) **out = **in } + if in.Primary != nil { + in, out := &in.Primary, &out.Primary + *out = new(bool) + **out = **in + } if in.Purpose != nil { in, out := &in.Purpose, &out.Purpose *out = new(string) **out = **in } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceParameters. @@ -5219,3 +5783,63 @@ func (in *SpecsParameters) DeepCopy() *SpecsParameters { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VPCNAT11InitParameters) DeepCopyInto(out *VPCNAT11InitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VPCNAT11InitParameters. +func (in *VPCNAT11InitParameters) DeepCopy() *VPCNAT11InitParameters { + if in == nil { + return nil + } + out := new(VPCNAT11InitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VPCNAT11Observation) DeepCopyInto(out *VPCNAT11Observation) { + *out = *in + if in.Address != nil { + in, out := &in.Address, &out.Address + *out = new(string) + **out = **in + } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(float64) + **out = **in + } + if in.VPCID != nil { + in, out := &in.VPCID, &out.VPCID + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VPCNAT11Observation. +func (in *VPCNAT11Observation) DeepCopy() *VPCNAT11Observation { + if in == nil { + return nil + } + out := new(VPCNAT11Observation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VPCNAT11Parameters) DeepCopyInto(out *VPCNAT11Parameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VPCNAT11Parameters. +func (in *VPCNAT11Parameters) DeepCopy() *VPCNAT11Parameters { + if in == nil { + return nil + } + out := new(VPCNAT11Parameters) + in.DeepCopyInto(out) + return out +} diff --git a/apis/instance/v1alpha1/zz_instance_types.go b/apis/instance/v1alpha1/zz_instance_types.go index e9e0d66..03e8d9a 100755 --- a/apis/instance/v1alpha1/zz_instance_types.go +++ b/apis/instance/v1alpha1/zz_instance_types.go @@ -162,6 +162,10 @@ type ConfigObservation struct { // Helpers enabled when booting to this Linode Config. Helpers []HelpersObservation `json:"helpers,omitempty" tf:"helpers,omitempty"` + // (Computed) The ID of the disk in the Linode API. + // The unique ID of this Config. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + // An array of Network Interfaces for this Linode’s Configuration Profile. Interface []InterfaceObservation `json:"interface,omitempty" tf:"interface,omitempty"` @@ -347,7 +351,7 @@ type DiskInitParameters struct { // The Disk filesystem can be one of: raw, swap, ext3, ext4, initrd (max 32mb) Filesystem *string `json:"filesystem,omitempty" tf:"filesystem,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. Examples are linode/debian12, linode/fedora39, linode/ubuntu22.04, 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"` @@ -384,7 +388,7 @@ type DiskObservation struct { // 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/. See images for more information on the Images available for you to use. Examples are linode/debian12, linode/fedora39, linode/ubuntu22.04, 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"` @@ -420,7 +424,7 @@ type DiskParameters struct { // +kubebuilder:validation:Optional Filesystem *string `json:"filesystem,omitempty" tf:"filesystem,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. Examples are linode/debian12, linode/fedora39, linode/ubuntu22.04, 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/. // +kubebuilder:validation:Optional Image *string `json:"image,omitempty" tf:"image,omitempty"` @@ -526,6 +530,41 @@ type HelpersParameters struct { UpdatedbDisabled *bool `json:"updatedbDisabled,omitempty" tf:"updatedb_disabled,omitempty"` } +type IPv4InitParameters struct { + + // The public IP that will be used for the one-to-one NAT purpose. If this is any, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address. + // The public IP that will be used for the one-to-one NAT purpose. + NAT11 *string `json:"nat11,omitempty" tf:"nat_1_1,omitempty"` + + // purpose. + // The IP from the VPC subnet to use for this interface. + VPC *string `json:"vpc,omitempty" tf:"vpc,omitempty"` +} + +type IPv4Observation struct { + + // The public IP that will be used for the one-to-one NAT purpose. If this is any, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address. + // The public IP that will be used for the one-to-one NAT purpose. + NAT11 *string `json:"nat11,omitempty" tf:"nat_1_1,omitempty"` + + // purpose. + // The IP from the VPC subnet to use for this interface. + VPC *string `json:"vpc,omitempty" tf:"vpc,omitempty"` +} + +type IPv4Parameters struct { + + // The public IP that will be used for the one-to-one NAT purpose. If this is any, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address. + // The public IP that will be used for the one-to-one NAT purpose. + // +kubebuilder:validation:Optional + NAT11 *string `json:"nat11,omitempty" tf:"nat_1_1,omitempty"` + + // purpose. + // The IP from the VPC subnet to use for this interface. + // +kubebuilder:validation:Optional + VPC *string `json:"vpc,omitempty" tf:"vpc,omitempty"` +} + type InstanceInitParameters struct { // Configuration options for alert triggers on this Linode. @@ -561,11 +600,15 @@ type InstanceInitParameters struct { // 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. Disk []DiskInitParameters `json:"disk,omitempty" tf:"disk,omitempty"` - // The display group of the Linode instance. + // The ID of the Firewall to attach to the instance upon creation. Changing + // The ID of the firewall applied to the Linode instance during creation. + FirewallID *float64 `json:"firewallId,omitempty" tf:"firewall_id,omitempty"` + + // A deprecated property denoting a group label for this Linode. We recommend using the tags attribute instead. // The display group of the Linode instance. Group *string `json:"group,omitempty" tf:"group,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. Examples are linode/debian12, linode/fedora39, linode/ubuntu22.04, 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"` @@ -579,6 +622,10 @@ type InstanceInitParameters struct { // Various fields related to the Linode Metadata service. Metadata []MetadataInitParameters `json:"metadata,omitempty" tf:"metadata,omitempty"` + // The type of migration to use when updating the type or region of a Linode. (cold, warm; default cold) + // The type of migration to use for resize and migration operations. + MigrationType *string `json:"migrationType,omitempty" tf:"migration_type,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"` @@ -613,7 +660,7 @@ type InstanceInitParameters struct { // 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. + // A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` @@ -629,50 +676,113 @@ type InstanceInitParameters struct { type InstanceInterfaceInitParameters struct { - // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. - // The IPAM Address of this interface. + // IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program. + // List of VPC IPs or IP ranges inside the VPC subnet. + IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` + + // 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. + // The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces. + IPv4 []InterfaceIPv4InitParameters `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) This field is only allowed for interfaces with the vlan purpose. + // This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces. 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. + // The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces. Label *string `json:"label,omitempty" tf:"label,omitempty"` - // The type of interface. (public, vlan) - // The purpose of this interface. + // Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the public or vpc purpose. + // Whether the interface is the primary interface that should have the default route for this Linode. + Primary *bool `json:"primary,omitempty" tf:"primary,omitempty"` + + // The type of interface. (public, vlan, vpc) + // The type of interface. Purpose *string `json:"purpose,omitempty" tf:"purpose,omitempty"` + + // The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the vpc purpose. + // The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces. + SubnetID *float64 `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` } type InstanceInterfaceObservation struct { - // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. - // The IPAM Address of this interface. + // Whether this interface is currently booted and active. + Active *bool `json:"active,omitempty" tf:"active,omitempty"` + + // (Computed) The ID of the disk in the Linode API. + // The ID of the interface. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program. + // List of VPC IPs or IP ranges inside the VPC subnet. + IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` + + // 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. + // The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces. + IPv4 []InterfaceIPv4Observation `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) This field is only allowed for interfaces with the vlan purpose. + // This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces. 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. + // The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces. Label *string `json:"label,omitempty" tf:"label,omitempty"` - // The type of interface. (public, vlan) - // The purpose of this interface. + // Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the public or vpc purpose. + // Whether the interface is the primary interface that should have the default route for this Linode. + Primary *bool `json:"primary,omitempty" tf:"primary,omitempty"` + + // The type of interface. (public, vlan, vpc) + // The type of interface. Purpose *string `json:"purpose,omitempty" tf:"purpose,omitempty"` + + // The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the vpc purpose. + // The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces. + SubnetID *float64 `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` + + // The ID of VPC which this interface is attached to. + // The ID of VPC of the subnet which the VPC interface is connected to. + VPCID *float64 `json:"vpcId,omitempty" tf:"vpc_id,omitempty"` } type InstanceInterfaceParameters struct { - // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. - // The IPAM Address of this interface. + // IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program. + // List of VPC IPs or IP ranges inside the VPC subnet. + // +kubebuilder:validation:Optional + IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` + + // 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. + // The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces. + // +kubebuilder:validation:Optional + IPv4 []InterfaceIPv4Parameters `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) This field is only allowed for interfaces with the vlan purpose. + // This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces. // +kubebuilder:validation:Optional 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. + // The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces. // +kubebuilder:validation:Optional Label *string `json:"label,omitempty" tf:"label,omitempty"` - // The type of interface. (public, vlan) - // The purpose of this interface. + // Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the public or vpc purpose. + // Whether the interface is the primary interface that should have the default route for this Linode. // +kubebuilder:validation:Optional - Purpose *string `json:"purpose,omitempty" tf:"purpose,omitempty"` + Primary *bool `json:"primary,omitempty" tf:"primary,omitempty"` + + // The type of interface. (public, vlan, vpc) + // The type of interface. + // +kubebuilder:validation:Optional + Purpose *string `json:"purpose" tf:"purpose,omitempty"` + + // The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the vpc purpose. + // The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces. + // +kubebuilder:validation:Optional + SubnetID *float64 `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` } type InstanceObservation struct { @@ -714,10 +824,15 @@ type InstanceObservation struct { // 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. Disk []DiskObservation `json:"disk,omitempty" tf:"disk,omitempty"` - // The display group of the Linode instance. + // The ID of the Firewall to attach to the instance upon creation. Changing + // The ID of the firewall applied to the Linode instance during creation. + FirewallID *float64 `json:"firewallId,omitempty" tf:"firewall_id,omitempty"` + + // A deprecated property denoting a group label for this Linode. We recommend using the tags attribute instead. // The display group of the Linode instance. Group *string `json:"group,omitempty" tf:"group,omitempty"` + // Whether this Instance was created with user-data. // Whether or not this Instance was created with user-data. HasUserData *bool `json:"hasUserData,omitempty" tf:"has_user_data,omitempty"` @@ -741,7 +856,7 @@ 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. Examples are linode/debian12, linode/fedora39, linode/ubuntu22.04, 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"` @@ -755,6 +870,10 @@ type InstanceObservation struct { // Various fields related to the Linode Metadata service. Metadata []MetadataObservation `json:"metadata,omitempty" tf:"metadata,omitempty"` + // The type of migration to use when updating the type or region of a Linode. (cold, warm; default cold) + // The type of migration to use for resize and migration operations. + MigrationType *string `json:"migrationType,omitempty" tf:"migration_type,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"` @@ -791,7 +910,7 @@ type InstanceObservation struct { // 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. + // A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` @@ -849,12 +968,17 @@ type InstanceParameters struct { // +kubebuilder:validation:Optional Disk []DiskParameters `json:"disk,omitempty" tf:"disk,omitempty"` - // The display group of the Linode instance. + // The ID of the Firewall to attach to the instance upon creation. Changing + // The ID of the firewall applied to the Linode instance during creation. + // +kubebuilder:validation:Optional + FirewallID *float64 `json:"firewallId,omitempty" tf:"firewall_id,omitempty"` + + // A deprecated property denoting a group label for this Linode. We recommend using the tags attribute instead. // The display group of the Linode instance. // +kubebuilder:validation:Optional Group *string `json:"group,omitempty" tf:"group,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. Examples are linode/debian12, linode/fedora39, linode/ubuntu22.04, 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. // +kubebuilder:validation:Optional Image *string `json:"image,omitempty" tf:"image,omitempty"` @@ -872,6 +996,11 @@ type InstanceParameters struct { // +kubebuilder:validation:Optional Metadata []MetadataParameters `json:"metadata,omitempty" tf:"metadata,omitempty"` + // The type of migration to use when updating the type or region of a Linode. (cold, warm; default cold) + // The type of migration to use for resize and migration operations. + // +kubebuilder:validation:Optional + MigrationType *string `json:"migrationType,omitempty" tf:"migration_type,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. // +kubebuilder:validation:Optional @@ -888,7 +1017,7 @@ type InstanceParameters struct { ResizeDisk *bool `json:"resizeDisk,omitempty" tf:"resize_disk,omitempty"` // The initial password for the root user account. This value can not be imported. - // The password that will be initialially assigned to the 'root' user account. + // The password that will be initially assigned to the 'root' user account. // +kubebuilder:validation:Optional RootPassSecretRef *v1.SecretKeySelector `json:"rootPassSecretRef,omitempty" tf:"-"` @@ -922,7 +1051,7 @@ type InstanceParameters struct { // +kubebuilder:validation:Optional SwapSize *float64 `json:"swapSize,omitempty" tf:"swap_size,omitempty"` - // A list of tags applied to this object. Tags are for organizational purposes only. + // A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +kubebuilder:validation:Optional // +listType=set @@ -939,68 +1068,169 @@ type InstanceParameters struct { WatchdogEnabled *bool `json:"watchdogEnabled,omitempty" tf:"watchdog_enabled,omitempty"` } +type InterfaceIPv4InitParameters struct { + + // The public IP that will be used for the one-to-one NAT purpose. If this is any, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address. + // The public IP that will be used for the one-to-one NAT purpose. + NAT11 *string `json:"nat11,omitempty" tf:"nat_1_1,omitempty"` + + // purpose. + // The IP from the VPC subnet to use for this interface. + VPC *string `json:"vpc,omitempty" tf:"vpc,omitempty"` +} + +type InterfaceIPv4Observation struct { + + // The public IP that will be used for the one-to-one NAT purpose. If this is any, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address. + // The public IP that will be used for the one-to-one NAT purpose. + NAT11 *string `json:"nat11,omitempty" tf:"nat_1_1,omitempty"` + + // purpose. + // The IP from the VPC subnet to use for this interface. + VPC *string `json:"vpc,omitempty" tf:"vpc,omitempty"` +} + +type InterfaceIPv4Parameters struct { + + // The public IP that will be used for the one-to-one NAT purpose. If this is any, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address. + // The public IP that will be used for the one-to-one NAT purpose. + // +kubebuilder:validation:Optional + NAT11 *string `json:"nat11,omitempty" tf:"nat_1_1,omitempty"` + + // purpose. + // The IP from the VPC subnet to use for this interface. + // +kubebuilder:validation:Optional + VPC *string `json:"vpc,omitempty" tf:"vpc,omitempty"` +} + type InterfaceInitParameters struct { - // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. - // The IPAM Address of this interface. + // IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program. + // List of VPC IPs or IP ranges inside the VPC subnet. + IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` + + // 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. + // The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces. + IPv4 []IPv4InitParameters `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) This field is only allowed for interfaces with the vlan purpose. + // This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces. 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. + // The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces. Label *string `json:"label,omitempty" tf:"label,omitempty"` - // The type of interface. (public, vlan) - // The purpose of this interface. + // Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the public or vpc purpose. + // Whether the interface is the primary interface that should have the default route for this Linode. + Primary *bool `json:"primary,omitempty" tf:"primary,omitempty"` + + // The type of interface. (public, vlan, vpc) + // The type of interface. Purpose *string `json:"purpose,omitempty" tf:"purpose,omitempty"` + + // The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the vpc purpose. + // The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces. + SubnetID *float64 `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` } type InterfaceObservation struct { - // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. - // The IPAM Address of this interface. + // Whether this interface is currently booted and active. + Active *bool `json:"active,omitempty" tf:"active,omitempty"` + + // (Computed) The ID of the disk in the Linode API. + // The ID of the interface. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program. + // List of VPC IPs or IP ranges inside the VPC subnet. + IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` + + // 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. + // The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces. + IPv4 []IPv4Observation `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) This field is only allowed for interfaces with the vlan purpose. + // This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces. 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. + // The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces. Label *string `json:"label,omitempty" tf:"label,omitempty"` - // The type of interface. (public, vlan) - // The purpose of this interface. + // Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the public or vpc purpose. + // Whether the interface is the primary interface that should have the default route for this Linode. + Primary *bool `json:"primary,omitempty" tf:"primary,omitempty"` + + // The type of interface. (public, vlan, vpc) + // The type of interface. Purpose *string `json:"purpose,omitempty" tf:"purpose,omitempty"` + + // The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the vpc purpose. + // The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces. + SubnetID *float64 `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` + + // The ID of VPC which this interface is attached to. + // The ID of VPC of the subnet which the VPC interface is connected to. + VPCID *float64 `json:"vpcId,omitempty" tf:"vpc_id,omitempty"` } type InterfaceParameters struct { - // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. - // The IPAM Address of this interface. + // IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program. + // List of VPC IPs or IP ranges inside the VPC subnet. + // +kubebuilder:validation:Optional + IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` + + // 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. + // The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces. + // +kubebuilder:validation:Optional + IPv4 []IPv4Parameters `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) This field is only allowed for interfaces with the vlan purpose. + // This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces. // +kubebuilder:validation:Optional 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. + // The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces. // +kubebuilder:validation:Optional Label *string `json:"label,omitempty" tf:"label,omitempty"` - // The type of interface. (public, vlan) - // The purpose of this interface. + // Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the public or vpc purpose. + // Whether the interface is the primary interface that should have the default route for this Linode. // +kubebuilder:validation:Optional - Purpose *string `json:"purpose,omitempty" tf:"purpose,omitempty"` + Primary *bool `json:"primary,omitempty" tf:"primary,omitempty"` + + // The type of interface. (public, vlan, vpc) + // The type of interface. + // +kubebuilder:validation:Optional + Purpose *string `json:"purpose" tf:"purpose,omitempty"` + + // The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the vpc purpose. + // The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces. + // +kubebuilder:validation:Optional + SubnetID *float64 `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` } type MetadataInitParameters struct { + // The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field. // The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field. UserData *string `json:"userData,omitempty" tf:"user_data,omitempty"` } type MetadataObservation struct { + // The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field. // The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field. UserData *string `json:"userData,omitempty" tf:"user_data,omitempty"` } type MetadataParameters struct { + // The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field. // The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field. // +kubebuilder:validation:Optional UserData *string `json:"userData,omitempty" tf:"user_data,omitempty"` diff --git a/apis/instance/v1alpha1/zz_ip_types.go b/apis/instance/v1alpha1/zz_ip_types.go index 71a517f..cb01f32 100755 --- a/apis/instance/v1alpha1/zz_ip_types.go +++ b/apis/instance/v1alpha1/zz_ip_types.go @@ -97,6 +97,9 @@ type IPObservation struct { // The type of IP address. (ipv4, ipv6, ipv6/pool, ipv6/range) // The type of IP address. Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Contains information about the NAT 1:1 mapping of a public IP address to a VPC subnet. + VPCNAT11 []VPCNAT11Observation `json:"vpcNat11,omitempty" tf:"vpc_nat_1_1,omitempty"` } type IPParameters struct { @@ -140,6 +143,22 @@ type IPParameters struct { RdnsSelector *v1.Selector `json:"rdnsSelector,omitempty" tf:"-"` } +type VPCNAT11InitParameters struct { +} + +type VPCNAT11Observation struct { + + // The resulting IPv4 address. + Address *string `json:"address,omitempty" tf:"address,omitempty"` + + SubnetID *float64 `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` + + VPCID *float64 `json:"vpcId,omitempty" tf:"vpc_id,omitempty"` +} + +type VPCNAT11Parameters struct { +} + // IPSpec defines the desired state of IP type IPSpec struct { v1.ResourceSpec `json:",inline"` diff --git a/apis/lke/v1alpha1/zz_cluster_types.go b/apis/lke/v1alpha1/zz_cluster_types.go index e0b99d7..2ef5156 100755 --- a/apis/lke/v1alpha1/zz_cluster_types.go +++ b/apis/lke/v1alpha1/zz_cluster_types.go @@ -73,7 +73,7 @@ type ClusterInitParameters struct { // This cluster's location. 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 the Kubernetes cluster. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` @@ -115,7 +115,7 @@ type ClusterObservation struct { // 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 the Kubernetes cluster. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` @@ -147,7 +147,7 @@ type ClusterParameters struct { // +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 the Kubernetes cluster. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +kubebuilder:validation:Optional // +listType=set @@ -199,7 +199,7 @@ type PoolInitParameters struct { // When specified, the number of nodes autoscales within the defined minimum and maximum values. Autoscaler []AutoscalerInitParameters `json:"autoscaler,omitempty" tf:"autoscaler,omitempty"` - // The number of nodes in the Node Pool. + // The number of nodes in the Node Pool. If undefined with an autoscaler the initial node count will equal the autoscaler minimum. // The number of nodes in the Node Pool. Count *float64 `json:"count,omitempty" tf:"count,omitempty"` @@ -213,7 +213,7 @@ 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. If undefined with an autoscaler the initial node count will equal the autoscaler minimum. // The number of nodes in the Node Pool. Count *float64 `json:"count,omitempty" tf:"count,omitempty"` @@ -235,10 +235,10 @@ type PoolParameters struct { // +kubebuilder:validation:Optional Autoscaler []AutoscalerParameters `json:"autoscaler,omitempty" tf:"autoscaler,omitempty"` - // The number of nodes in the Node Pool. + // The number of nodes in the Node Pool. If undefined with an autoscaler the initial node count will equal the autoscaler minimum. // The number of nodes in the Node Pool. // +kubebuilder:validation:Optional - Count *float64 `json:"count" tf:"count,omitempty"` + Count *float64 `json:"count,omitempty" tf:"count,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. diff --git a/apis/nodebalancer/v1alpha1/zz_generated.deepcopy.go b/apis/nodebalancer/v1alpha1/zz_generated.deepcopy.go index 9b923ce..58306f0 100644 --- a/apis/nodebalancer/v1alpha1/zz_generated.deepcopy.go +++ b/apis/nodebalancer/v1alpha1/zz_generated.deepcopy.go @@ -414,6 +414,198 @@ func (in *ConfigStatus) DeepCopy() *ConfigStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FirewallsInitParameters) DeepCopyInto(out *FirewallsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallsInitParameters. +func (in *FirewallsInitParameters) DeepCopy() *FirewallsInitParameters { + if in == nil { + return nil + } + out := new(FirewallsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FirewallsObservation) DeepCopyInto(out *FirewallsObservation) { + *out = *in + if in.Created != nil { + in, out := &in.Created, &out.Created + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **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.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 + } + } + } + if in.Updated != nil { + in, out := &in.Updated, &out.Updated + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallsObservation. +func (in *FirewallsObservation) DeepCopy() *FirewallsObservation { + if in == nil { + return nil + } + out := new(FirewallsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FirewallsParameters) DeepCopyInto(out *FirewallsParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallsParameters. +func (in *FirewallsParameters) DeepCopy() *FirewallsParameters { + if in == nil { + return nil + } + out := new(FirewallsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InboundInitParameters) DeepCopyInto(out *InboundInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InboundInitParameters. +func (in *InboundInitParameters) DeepCopy() *InboundInitParameters { + if in == nil { + return nil + } + out := new(InboundInitParameters) + in.DeepCopyInto(out) + return out +} + +// 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. +func (in *InboundObservation) DeepCopy() *InboundObservation { + if in == nil { + return nil + } + out := new(InboundObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InboundParameters) DeepCopyInto(out *InboundParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InboundParameters. +func (in *InboundParameters) DeepCopy() *InboundParameters { + if in == nil { + return nil + } + out := new(InboundParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Node) DeepCopyInto(out *Node) { *out = *in @@ -871,6 +1063,13 @@ func (in *NodebalancerObservation) DeepCopyInto(out *NodebalancerObservation) { *out = new(float64) **out = **in } + if in.Firewalls != nil { + in, out := &in.Firewalls, &out.Firewalls + *out = make([]FirewallsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Hostname != nil { in, out := &in.Hostname, &out.Hostname *out = new(string) @@ -1017,6 +1216,93 @@ func (in *NodebalancerStatus) DeepCopy() *NodebalancerStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OutboundInitParameters) DeepCopyInto(out *OutboundInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OutboundInitParameters. +func (in *OutboundInitParameters) DeepCopy() *OutboundInitParameters { + if in == nil { + return nil + } + out := new(OutboundInitParameters) + in.DeepCopyInto(out) + return out +} + +// 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. +func (in *OutboundObservation) DeepCopy() *OutboundObservation { + if in == nil { + return nil + } + out := new(OutboundObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OutboundParameters) DeepCopyInto(out *OutboundParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OutboundParameters. +func (in *OutboundParameters) DeepCopy() *OutboundParameters { + if in == nil { + return nil + } + out := new(OutboundParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TransferInitParameters) DeepCopyInto(out *TransferInitParameters) { *out = *in diff --git a/apis/nodebalancer/v1alpha1/zz_nodebalancer_types.go b/apis/nodebalancer/v1alpha1/zz_nodebalancer_types.go index 62bf1d3..01edf96 100755 --- a/apis/nodebalancer/v1alpha1/zz_nodebalancer_types.go +++ b/apis/nodebalancer/v1alpha1/zz_nodebalancer_types.go @@ -17,12 +17,78 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type FirewallsInitParameters struct { +} + +type FirewallsObservation struct { + + // When this NodeBalancer was created + Created *string `json:"created,omitempty" tf:"created,omitempty"` + + // The Firewall's ID. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + Inbound []InboundObservation `json:"inbound,omitempty" tf:"inbound,omitempty"` + + // The default behavior for inbound traffic. (ACCEPT, DROP) + InboundPolicy *string `json:"inboundPolicy,omitempty" tf:"inbound_policy,omitempty"` + + // The label of the Linode NodeBalancer + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + Outbound []OutboundObservation `json:"outbound,omitempty" tf:"outbound,omitempty"` + + // The default behavior for outbound traffic. (ACCEPT, DROP) + OutboundPolicy *string `json:"outboundPolicy,omitempty" tf:"outbound_policy,omitempty"` + + // The status of the firewall. (enabled, disabled, deleted) + Status *string `json:"status,omitempty" tf:"status,omitempty"` + + // A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only. + // +listType=set + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // When this NodeBalancer was last updated. + Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` +} + +type FirewallsParameters struct { +} + +type InboundInitParameters struct { +} + +type InboundObservation struct { + + // 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"` + + // The Public IPv4 Address of this NodeBalancer + IPv4 []*string `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // The Public IPv6 Address of this NodeBalancer + IPv6 []*string `json:"ipv6,omitempty" tf:"ipv6,omitempty"` + + // The label of the Linode NodeBalancer + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // 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) + Protocol *string `json:"protocol,omitempty" tf:"protocol,omitempty"` +} + +type InboundParameters struct { +} + type NodebalancerInitParameters 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"` + // The Firewall's ID. // ID for the firewall you'd like to use with this NodeBalancer. FirewallID *float64 `json:"firewallId,omitempty" tf:"firewall_id,omitempty"` @@ -34,7 +100,7 @@ type NodebalancerInitParameters struct { // 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. + // A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` @@ -50,13 +116,18 @@ type NodebalancerObservation struct { // When this NodeBalancer was created. Created *string `json:"created,omitempty" tf:"created,omitempty"` + // The Firewall's ID. // ID for the firewall you'd like to use with this NodeBalancer. FirewallID *float64 `json:"firewallId,omitempty" tf:"firewall_id,omitempty"` + // A list of Firewalls assigned to this NodeBalancer. + Firewalls []FirewallsObservation `json:"firewalls,omitempty" tf:"firewalls,omitempty"` + // This NodeBalancer's hostname, ending with .nodebalancer.linode.com // This NodeBalancer's hostname, ending with .nodebalancer.linode.com Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + // The Firewall's ID. ID *string `json:"id,omitempty" tf:"id,omitempty"` // The Public IPv4 Address of this NodeBalancer @@ -75,7 +146,7 @@ type NodebalancerObservation struct { // 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. + // A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` @@ -95,6 +166,7 @@ type NodebalancerParameters struct { // +kubebuilder:validation:Optional ClientConnThrottle *float64 `json:"clientConnThrottle,omitempty" tf:"client_conn_throttle,omitempty"` + // The Firewall's ID. // ID for the firewall you'd like to use with this NodeBalancer. // +kubebuilder:validation:Optional FirewallID *float64 `json:"firewallId,omitempty" tf:"firewall_id,omitempty"` @@ -109,13 +181,40 @@ type NodebalancerParameters struct { // +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. + // A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +kubebuilder:validation:Optional // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` } +type OutboundInitParameters struct { +} + +type OutboundObservation struct { + + // 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"` + + // The Public IPv4 Address of this NodeBalancer + IPv4 []*string `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // The Public IPv6 Address of this NodeBalancer + IPv6 []*string `json:"ipv6,omitempty" tf:"ipv6,omitempty"` + + // The label of the Linode NodeBalancer + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // 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) + Protocol *string `json:"protocol,omitempty" tf:"protocol,omitempty"` +} + +type OutboundParameters struct { +} + type TransferInitParameters struct { } diff --git a/apis/objectstorage/v1alpha1/zz_bucket_types.go b/apis/objectstorage/v1alpha1/zz_bucket_types.go index 7d618ce..18521e1 100755 --- a/apis/objectstorage/v1alpha1/zz_bucket_types.go +++ b/apis/objectstorage/v1alpha1/zz_bucket_types.go @@ -97,6 +97,9 @@ type BucketObservation struct { // If true, the bucket will be created with CORS enabled for all origins. CorsEnabled *bool `json:"corsEnabled,omitempty" tf:"cors_enabled,omitempty"` + // The endpoint for the bucket used for s3 connections. + Endpoint *string `json:"endpoint,omitempty" tf:"endpoint,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"` diff --git a/apis/objectstorage/v1alpha1/zz_generated.deepcopy.go b/apis/objectstorage/v1alpha1/zz_generated.deepcopy.go index 9c39c24..1de1820 100644 --- a/apis/objectstorage/v1alpha1/zz_generated.deepcopy.go +++ b/apis/objectstorage/v1alpha1/zz_generated.deepcopy.go @@ -276,6 +276,11 @@ func (in *BucketObservation) DeepCopyInto(out *BucketObservation) { *out = new(bool) **out = **in } + if in.Endpoint != nil { + in, out := &in.Endpoint, &out.Endpoint + *out = new(string) + **out = **in + } if in.Hostname != nil { in, out := &in.Hostname, &out.Hostname *out = new(string) @@ -1091,6 +1096,11 @@ func (in *ObjectInitParameters) DeepCopyInto(out *ObjectInitParameters) { *out = new(string) **out = **in } + if in.Endpoint != nil { + in, out := &in.Endpoint, &out.Endpoint + *out = new(string) + **out = **in + } if in.Etag != nil { in, out := &in.Etag, &out.Etag *out = new(string) @@ -1249,6 +1259,11 @@ func (in *ObjectObservation) DeepCopyInto(out *ObjectObservation) { *out = new(string) **out = **in } + if in.Endpoint != nil { + in, out := &in.Endpoint, &out.Endpoint + *out = new(string) + **out = **in + } if in.Etag != nil { in, out := &in.Etag, &out.Etag *out = new(string) @@ -1385,6 +1400,11 @@ func (in *ObjectParameters) DeepCopyInto(out *ObjectParameters) { *out = new(string) **out = **in } + if in.Endpoint != nil { + in, out := &in.Endpoint, &out.Endpoint + *out = new(string) + **out = **in + } if in.Etag != nil { in, out := &in.Etag, &out.Etag *out = new(string) diff --git a/apis/objectstorage/v1alpha1/zz_object_types.go b/apis/objectstorage/v1alpha1/zz_object_types.go index 805a7a6..732f6a2 100755 --- a/apis/objectstorage/v1alpha1/zz_object_types.go +++ b/apis/objectstorage/v1alpha1/zz_object_types.go @@ -74,6 +74,10 @@ type ObjectInitParameters struct { // The MIME type of the content. ContentType *string `json:"contentType,omitempty" tf:"content_type,omitempty"` + // Used with the s3 client to make bucket changes and will be computed automatically if left blank, override for testing/debug purposes. + // The endpoint for the bucket used for s3 connections. + Endpoint *string `json:"endpoint,omitempty" tf:"endpoint,omitempty"` + // Used to trigger updates.11.11.11 or earlier). // The specific version of this object. Etag *string `json:"etag,omitempty" tf:"etag,omitempty"` @@ -161,6 +165,10 @@ type ObjectObservation struct { // The MIME type of the content. ContentType *string `json:"contentType,omitempty" tf:"content_type,omitempty"` + // Used with the s3 client to make bucket changes and will be computed automatically if left blank, override for testing/debug purposes. + // The endpoint for the bucket used for s3 connections. + Endpoint *string `json:"endpoint,omitempty" tf:"endpoint,omitempty"` + // Used to trigger updates.11.11.11 or earlier). // The specific version of this object. Etag *string `json:"etag,omitempty" tf:"etag,omitempty"` @@ -265,6 +273,11 @@ type ObjectParameters struct { // +kubebuilder:validation:Optional ContentType *string `json:"contentType,omitempty" tf:"content_type,omitempty"` + // Used with the s3 client to make bucket changes and will be computed automatically if left blank, override for testing/debug purposes. + // The endpoint for the bucket used for s3 connections. + // +kubebuilder:validation:Optional + Endpoint *string `json:"endpoint,omitempty" tf:"endpoint,omitempty"` + // Used to trigger updates.11.11.11 or earlier). // The specific version of this object. // +kubebuilder:validation:Optional diff --git a/apis/user/v1alpha1/zz_user_types.go b/apis/user/v1alpha1/zz_user_types.go index 27d53de..7ac9da9 100755 --- a/apis/user/v1alpha1/zz_user_types.go +++ b/apis/user/v1alpha1/zz_user_types.go @@ -89,6 +89,7 @@ type FirewallGrantParameters struct { type GlobalGrantsInitParameters struct { + // The level of access this User has to Account-level actions, like billing information. (read_only, read_write) // 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"` @@ -138,6 +139,7 @@ type GlobalGrantsInitParameters struct { type GlobalGrantsObservation struct { + // The level of access this User has to Account-level actions, like billing information. (read_only, read_write) // 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"` @@ -187,6 +189,7 @@ type GlobalGrantsObservation struct { type GlobalGrantsParameters struct { + // The level of access this User has to Account-level actions, like billing information. (read_only, read_write) // The level of access this User has to Account-level actions, like billing information. A restricted User will never be able to manage users. // +kubebuilder:validation:Optional AccountAccess *string `json:"accountAccess,omitempty" tf:"account_access,omitempty"` diff --git a/apis/volume/v1alpha1/zz_volume_types.go b/apis/volume/v1alpha1/zz_volume_types.go index 179380d..6884533 100755 --- a/apis/volume/v1alpha1/zz_volume_types.go +++ b/apis/volume/v1alpha1/zz_volume_types.go @@ -48,7 +48,7 @@ type VolumeInitParameters struct { // The ID of a volume to clone. SourceVolumeID *float64 `json:"sourceVolumeId,omitempty" tf:"source_volume_id,omitempty"` - // A list of tags applied to this object. Tags are for organizational purposes only. + // A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` @@ -86,7 +86,7 @@ type VolumeObservation struct { // 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. + // A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` @@ -128,7 +128,7 @@ type VolumeParameters struct { // +kubebuilder:validation:Optional SourceVolumeID *float64 `json:"sourceVolumeId,omitempty" tf:"source_volume_id,omitempty"` - // A list of tags applied to this object. Tags are for organizational purposes only. + // A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only. // An array of tags applied to this object. Tags are for organizational purposes only. // +kubebuilder:validation:Optional // +listType=set diff --git a/apis/vpc/v1alpha1/zz_generated.conversion_hubs.go b/apis/vpc/v1alpha1/zz_generated.conversion_hubs.go new file mode 100755 index 0000000..89b2226 --- /dev/null +++ b/apis/vpc/v1alpha1/zz_generated.conversion_hubs.go @@ -0,0 +1,17 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +// Hub marks this type as a conversion hub. +func (tr *VPC) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Subnet) Hub() {} diff --git a/apis/vpc/v1alpha1/zz_generated.deepcopy.go b/apis/vpc/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 0000000..1caa508 --- /dev/null +++ b/apis/vpc/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,551 @@ +//go:build !ignore_autogenerated + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by controller-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "github.com/crossplane/crossplane-runtime/apis/common/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InterfacesInitParameters) DeepCopyInto(out *InterfacesInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfacesInitParameters. +func (in *InterfacesInitParameters) DeepCopy() *InterfacesInitParameters { + if in == nil { + return nil + } + out := new(InterfacesInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InterfacesObservation) DeepCopyInto(out *InterfacesObservation) { + *out = *in + if in.Active != nil { + in, out := &in.Active, &out.Active + *out = new(bool) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfacesObservation. +func (in *InterfacesObservation) DeepCopy() *InterfacesObservation { + if in == nil { + return nil + } + out := new(InterfacesObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InterfacesParameters) DeepCopyInto(out *InterfacesParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfacesParameters. +func (in *InterfacesParameters) DeepCopy() *InterfacesParameters { + if in == nil { + return nil + } + out := new(InterfacesParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LinodesInitParameters) DeepCopyInto(out *LinodesInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LinodesInitParameters. +func (in *LinodesInitParameters) DeepCopy() *LinodesInitParameters { + if in == nil { + return nil + } + out := new(LinodesInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LinodesObservation) DeepCopyInto(out *LinodesObservation) { + *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Interfaces != nil { + in, out := &in.Interfaces, &out.Interfaces + *out = make([]InterfacesObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LinodesObservation. +func (in *LinodesObservation) DeepCopy() *LinodesObservation { + if in == nil { + return nil + } + out := new(LinodesObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LinodesParameters) DeepCopyInto(out *LinodesParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LinodesParameters. +func (in *LinodesParameters) DeepCopy() *LinodesParameters { + if in == nil { + return nil + } + out := new(LinodesParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Subnet) DeepCopyInto(out *Subnet) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Subnet. +func (in *Subnet) DeepCopy() *Subnet { + if in == nil { + return nil + } + out := new(Subnet) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Subnet) 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 *SubnetInitParameters) DeepCopyInto(out *SubnetInitParameters) { + *out = *in + if in.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.VPCID != nil { + in, out := &in.VPCID, &out.VPCID + *out = new(float64) + **out = **in + } + if in.VPCIDRef != nil { + in, out := &in.VPCIDRef, &out.VPCIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.VPCIDSelector != nil { + in, out := &in.VPCIDSelector, &out.VPCIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubnetInitParameters. +func (in *SubnetInitParameters) DeepCopy() *SubnetInitParameters { + if in == nil { + return nil + } + out := new(SubnetInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SubnetList) DeepCopyInto(out *SubnetList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Subnet, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubnetList. +func (in *SubnetList) DeepCopy() *SubnetList { + if in == nil { + return nil + } + out := new(SubnetList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *SubnetList) 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 *SubnetObservation) DeepCopyInto(out *SubnetObservation) { + *out = *in + if in.Created != nil { + in, out := &in.Created, &out.Created + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *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([]LinodesObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Updated != nil { + in, out := &in.Updated, &out.Updated + *out = new(string) + **out = **in + } + if in.VPCID != nil { + in, out := &in.VPCID, &out.VPCID + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubnetObservation. +func (in *SubnetObservation) DeepCopy() *SubnetObservation { + if in == nil { + return nil + } + out := new(SubnetObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SubnetParameters) DeepCopyInto(out *SubnetParameters) { + *out = *in + if in.IPv4 != nil { + in, out := &in.IPv4, &out.IPv4 + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.VPCID != nil { + in, out := &in.VPCID, &out.VPCID + *out = new(float64) + **out = **in + } + if in.VPCIDRef != nil { + in, out := &in.VPCIDRef, &out.VPCIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.VPCIDSelector != nil { + in, out := &in.VPCIDSelector, &out.VPCIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubnetParameters. +func (in *SubnetParameters) DeepCopy() *SubnetParameters { + if in == nil { + return nil + } + out := new(SubnetParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SubnetSpec) DeepCopyInto(out *SubnetSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubnetSpec. +func (in *SubnetSpec) DeepCopy() *SubnetSpec { + if in == nil { + return nil + } + out := new(SubnetSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SubnetStatus) DeepCopyInto(out *SubnetStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubnetStatus. +func (in *SubnetStatus) DeepCopy() *SubnetStatus { + if in == nil { + return nil + } + out := new(SubnetStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VPC) DeepCopyInto(out *VPC) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VPC. +func (in *VPC) DeepCopy() *VPC { + if in == nil { + return nil + } + out := new(VPC) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *VPC) 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 *VPCInitParameters) DeepCopyInto(out *VPCInitParameters) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *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 + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VPCInitParameters. +func (in *VPCInitParameters) DeepCopy() *VPCInitParameters { + if in == nil { + return nil + } + out := new(VPCInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VPCList) DeepCopyInto(out *VPCList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]VPC, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VPCList. +func (in *VPCList) DeepCopy() *VPCList { + if in == nil { + return nil + } + out := new(VPCList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *VPCList) 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 *VPCObservation) DeepCopyInto(out *VPCObservation) { + *out = *in + if in.Created != nil { + in, out := &in.Created, &out.Created + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.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.Updated != nil { + in, out := &in.Updated, &out.Updated + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VPCObservation. +func (in *VPCObservation) DeepCopy() *VPCObservation { + if in == nil { + return nil + } + out := new(VPCObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VPCParameters) DeepCopyInto(out *VPCParameters) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *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 + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VPCParameters. +func (in *VPCParameters) DeepCopy() *VPCParameters { + if in == nil { + return nil + } + out := new(VPCParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VPCSpec) DeepCopyInto(out *VPCSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VPCSpec. +func (in *VPCSpec) DeepCopy() *VPCSpec { + if in == nil { + return nil + } + out := new(VPCSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VPCStatus) DeepCopyInto(out *VPCStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VPCStatus. +func (in *VPCStatus) DeepCopy() *VPCStatus { + if in == nil { + return nil + } + out := new(VPCStatus) + in.DeepCopyInto(out) + return out +} diff --git a/apis/vpc/v1alpha1/zz_generated.managed.go b/apis/vpc/v1alpha1/zz_generated.managed.go new file mode 100644 index 0000000..d37a68e --- /dev/null +++ b/apis/vpc/v1alpha1/zz_generated.managed.go @@ -0,0 +1,128 @@ +/* +Copyright 2022 Upbound Inc. +*/ +// Code generated by angryjet. DO NOT EDIT. + +package v1alpha1 + +import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" + +// GetCondition of this Subnet. +func (mg *Subnet) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this Subnet. +func (mg *Subnet) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this Subnet. +func (mg *Subnet) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this Subnet. +func (mg *Subnet) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this Subnet. +func (mg *Subnet) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this Subnet. +func (mg *Subnet) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this Subnet. +func (mg *Subnet) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this Subnet. +func (mg *Subnet) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this Subnet. +func (mg *Subnet) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this Subnet. +func (mg *Subnet) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this Subnet. +func (mg *Subnet) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this Subnet. +func (mg *Subnet) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} + +// GetCondition of this VPC. +func (mg *VPC) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this VPC. +func (mg *VPC) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this VPC. +func (mg *VPC) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this VPC. +func (mg *VPC) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this VPC. +func (mg *VPC) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this VPC. +func (mg *VPC) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this VPC. +func (mg *VPC) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this VPC. +func (mg *VPC) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this VPC. +func (mg *VPC) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this VPC. +func (mg *VPC) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this VPC. +func (mg *VPC) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this VPC. +func (mg *VPC) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} diff --git a/apis/vpc/v1alpha1/zz_generated.managedlist.go b/apis/vpc/v1alpha1/zz_generated.managedlist.go new file mode 100644 index 0000000..24559b2 --- /dev/null +++ b/apis/vpc/v1alpha1/zz_generated.managedlist.go @@ -0,0 +1,26 @@ +/* +Copyright 2022 Upbound Inc. +*/ +// Code generated by angryjet. DO NOT EDIT. + +package v1alpha1 + +import resource "github.com/crossplane/crossplane-runtime/pkg/resource" + +// GetItems of this SubnetList. +func (l *SubnetList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} + +// GetItems of this VPCList. +func (l *VPCList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} diff --git a/apis/vpc/v1alpha1/zz_generated.resolvers.go b/apis/vpc/v1alpha1/zz_generated.resolvers.go new file mode 100644 index 0000000..2e429b2 --- /dev/null +++ b/apis/vpc/v1alpha1/zz_generated.resolvers.go @@ -0,0 +1,55 @@ +/* +Copyright 2022 Upbound Inc. +*/ +// Code generated by angryjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + reference "github.com/crossplane/crossplane-runtime/pkg/reference" + errors "github.com/pkg/errors" + client "sigs.k8s.io/controller-runtime/pkg/client" +) + +// ResolveReferences of this Subnet. +func (mg *Subnet) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromFloatPtrValue(mg.Spec.ForProvider.VPCID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.VPCIDRef, + Selector: mg.Spec.ForProvider.VPCIDSelector, + To: reference.To{ + List: &VPCList{}, + Managed: &VPC{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.VPCID") + } + mg.Spec.ForProvider.VPCID = reference.ToFloatPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.VPCIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromFloatPtrValue(mg.Spec.InitProvider.VPCID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.VPCIDRef, + Selector: mg.Spec.InitProvider.VPCIDSelector, + To: reference.To{ + List: &VPCList{}, + Managed: &VPC{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.VPCID") + } + mg.Spec.InitProvider.VPCID = reference.ToFloatPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.VPCIDRef = rsp.ResolvedReference + + return nil +} diff --git a/apis/vpc/v1alpha1/zz_groupversion_info.go b/apis/vpc/v1alpha1/zz_groupversion_info.go new file mode 100755 index 0000000..45a5cc9 --- /dev/null +++ b/apis/vpc/v1alpha1/zz_groupversion_info.go @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +// +kubebuilder:object:generate=true +// +groupName=vpc.linode.upbound.io +// +versionName=v1alpha1 +package v1alpha1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +// Package type metadata. +const ( + CRDGroup = "vpc.linode.upbound.io" + CRDVersion = "v1alpha1" +) + +var ( + // CRDGroupVersion is the API Group Version used to register the objects + CRDGroupVersion = schema.GroupVersion{Group: CRDGroup, Version: CRDVersion} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme + SchemeBuilder = &scheme.Builder{GroupVersion: CRDGroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + AddToScheme = SchemeBuilder.AddToScheme +) diff --git a/apis/vpc/v1alpha1/zz_subnet_terraformed.go b/apis/vpc/v1alpha1/zz_subnet_terraformed.go new file mode 100755 index 0000000..7d0fdc4 --- /dev/null +++ b/apis/vpc/v1alpha1/zz_subnet_terraformed.go @@ -0,0 +1,133 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Subnet +func (mg *Subnet) GetTerraformResourceType() string { + return "linode_vpc_subnet" +} + +// GetConnectionDetailsMapping for this Subnet +func (tr *Subnet) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this Subnet +func (tr *Subnet) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Subnet +func (tr *Subnet) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Subnet +func (tr *Subnet) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Subnet +func (tr *Subnet) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Subnet +func (tr *Subnet) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Subnet +func (tr *Subnet) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Subnet +func (tr *Subnet) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Subnet using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Subnet) LateInitialize(attrs []byte) (bool, error) { + params := &SubnetParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *Subnet) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/vpc/v1alpha1/zz_subnet_types.go b/apis/vpc/v1alpha1/zz_subnet_types.go new file mode 100755 index 0000000..e01acc5 --- /dev/null +++ b/apis/vpc/v1alpha1/zz_subnet_types.go @@ -0,0 +1,188 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type InterfacesInitParameters struct { +} + +type InterfacesObservation struct { + Active *bool `json:"active,omitempty" tf:"active,omitempty"` + + // The ID of the VPC Subnet. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` +} + +type InterfacesParameters struct { +} + +type LinodesInitParameters struct { +} + +type LinodesObservation struct { + + // The ID of the VPC Subnet. + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + Interfaces []InterfacesObservation `json:"interfaces,omitempty" tf:"interfaces,omitempty"` +} + +type LinodesParameters struct { +} + +type SubnetInitParameters struct { + + // The IPv4 range of this subnet in CIDR format. + // The IPv4 range of this subnet in CIDR format. + IPv4 *string `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // The label of the VPC. Only contains ASCII letters, digits and dashes. + // The label of the VPC subnet. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The id of the parent VPC for this VPC Subnet. + // The id of the parent VPC for this VPC Subnet + // +crossplane:generate:reference:type=github.com/linode/provider-linode/apis/vpc/v1alpha1.VPC + VPCID *float64 `json:"vpcId,omitempty" tf:"vpc_id,omitempty"` + + // Reference to a VPC in vpc to populate vpcId. + // +kubebuilder:validation:Optional + VPCIDRef *v1.Reference `json:"vpcIdRef,omitempty" tf:"-"` + + // Selector for a VPC in vpc to populate vpcId. + // +kubebuilder:validation:Optional + VPCIDSelector *v1.Selector `json:"vpcIdSelector,omitempty" tf:"-"` +} + +type SubnetObservation struct { + + // The date and time when the VPC was created. + // The date and time when the VPC Subnet was created. + Created *string `json:"created,omitempty" tf:"created,omitempty"` + + // The ID of the VPC Subnet. + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // The IPv4 range of this subnet in CIDR format. + // The IPv4 range of this subnet in CIDR format. + IPv4 *string `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // The label of the VPC. Only contains ASCII letters, digits and dashes. + // The label of the VPC subnet. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // A list of Linode IDs that added to this subnet. + Linodes []LinodesObservation `json:"linodes,omitempty" tf:"linodes,omitempty"` + + // The date and time when the VPC was last updated. + // The date and time when the VPC Subnet was updated. + Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` + + // The id of the parent VPC for this VPC Subnet. + // The id of the parent VPC for this VPC Subnet + VPCID *float64 `json:"vpcId,omitempty" tf:"vpc_id,omitempty"` +} + +type SubnetParameters struct { + + // The IPv4 range of this subnet in CIDR format. + // The IPv4 range of this subnet in CIDR format. + // +kubebuilder:validation:Optional + IPv4 *string `json:"ipv4,omitempty" tf:"ipv4,omitempty"` + + // The label of the VPC. Only contains ASCII letters, digits and dashes. + // The label of the VPC subnet. + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The id of the parent VPC for this VPC Subnet. + // The id of the parent VPC for this VPC Subnet + // +crossplane:generate:reference:type=github.com/linode/provider-linode/apis/vpc/v1alpha1.VPC + // +kubebuilder:validation:Optional + VPCID *float64 `json:"vpcId,omitempty" tf:"vpc_id,omitempty"` + + // Reference to a VPC in vpc to populate vpcId. + // +kubebuilder:validation:Optional + VPCIDRef *v1.Reference `json:"vpcIdRef,omitempty" tf:"-"` + + // Selector for a VPC in vpc to populate vpcId. + // +kubebuilder:validation:Optional + VPCIDSelector *v1.Selector `json:"vpcIdSelector,omitempty" tf:"-"` +} + +// SubnetSpec defines the desired state of Subnet +type SubnetSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider SubnetParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider SubnetInitParameters `json:"initProvider,omitempty"` +} + +// SubnetStatus defines the observed state of Subnet. +type SubnetStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider SubnetObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion + +// Subnet is the Schema for the Subnets API. Manages a Linode VPC subnet. +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,linode} +type Subnet struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.ipv4) || (has(self.initProvider) && has(self.initProvider.ipv4))",message="spec.forProvider.ipv4 is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.label) || (has(self.initProvider) && has(self.initProvider.label))",message="spec.forProvider.label is a required parameter" + Spec SubnetSpec `json:"spec"` + Status SubnetStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// SubnetList contains a list of Subnets +type SubnetList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Subnet `json:"items"` +} + +// Repository type metadata. +var ( + Subnet_Kind = "Subnet" + Subnet_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: Subnet_Kind}.String() + Subnet_KindAPIVersion = Subnet_Kind + "." + CRDGroupVersion.String() + Subnet_GroupVersionKind = CRDGroupVersion.WithKind(Subnet_Kind) +) + +func init() { + SchemeBuilder.Register(&Subnet{}, &SubnetList{}) +} diff --git a/apis/vpc/v1alpha1/zz_vpc_terraformed.go b/apis/vpc/v1alpha1/zz_vpc_terraformed.go new file mode 100755 index 0000000..7658565 --- /dev/null +++ b/apis/vpc/v1alpha1/zz_vpc_terraformed.go @@ -0,0 +1,133 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this VPC +func (mg *VPC) GetTerraformResourceType() string { + return "linode_vpc" +} + +// GetConnectionDetailsMapping for this VPC +func (tr *VPC) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this VPC +func (tr *VPC) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this VPC +func (tr *VPC) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this VPC +func (tr *VPC) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this VPC +func (tr *VPC) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this VPC +func (tr *VPC) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this VPC +func (tr *VPC) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this VPC +func (tr *VPC) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this VPC using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *VPC) LateInitialize(attrs []byte) (bool, error) { + params := &VPCParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *VPC) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/vpc/v1alpha1/zz_vpc_types.go b/apis/vpc/v1alpha1/zz_vpc_types.go new file mode 100755 index 0000000..f6a72cb --- /dev/null +++ b/apis/vpc/v1alpha1/zz_vpc_types.go @@ -0,0 +1,140 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type VPCInitParameters struct { + + // The user-defined description of this VPC. + // The user-defined description of this VPC. + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // The label of the VPC. This field can only contain ASCII letters, digits and dashes. + // The label of the VPC. Only contains ascii letters, digits and dashes + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The region of the VPC. + // The region of the VPC. + Region *string `json:"region,omitempty" tf:"region,omitempty"` +} + +type VPCObservation struct { + + // The date and time when the VPC was created. + // The date and time when the VPC was created. + Created *string `json:"created,omitempty" tf:"created,omitempty"` + + // The user-defined description of this VPC. + // The user-defined description of this VPC. + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // The ID of the VPC. + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // The label of the VPC. This field can only contain ASCII letters, digits and dashes. + // The label of the VPC. Only contains ascii letters, digits and dashes + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The region of the VPC. + // The region of the VPC. + Region *string `json:"region,omitempty" tf:"region,omitempty"` + + // The date and time when the VPC was last updated. + // The date and time when the VPC was updated. + Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` +} + +type VPCParameters struct { + + // The user-defined description of this VPC. + // The user-defined description of this VPC. + // +kubebuilder:validation:Optional + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // The label of the VPC. This field can only contain ASCII letters, digits and dashes. + // The label of the VPC. Only contains ascii letters, digits and dashes + // +kubebuilder:validation:Optional + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // The region of the VPC. + // The region of the VPC. + // +kubebuilder:validation:Optional + Region *string `json:"region,omitempty" tf:"region,omitempty"` +} + +// VPCSpec defines the desired state of VPC +type VPCSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider VPCParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider VPCInitParameters `json:"initProvider,omitempty"` +} + +// VPCStatus defines the observed state of VPC. +type VPCStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider VPCObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion + +// VPC is the Schema for the VPCs API. Manages a Linode VPC. +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,linode} +type VPC struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.label) || (has(self.initProvider) && has(self.initProvider.label))",message="spec.forProvider.label is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.region) || (has(self.initProvider) && has(self.initProvider.region))",message="spec.forProvider.region is a required parameter" + Spec VPCSpec `json:"spec"` + Status VPCStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// VPCList contains a list of VPCs +type VPCList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []VPC `json:"items"` +} + +// Repository type metadata. +var ( + VPC_Kind = "VPC" + VPC_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: VPC_Kind}.String() + VPC_KindAPIVersion = VPC_Kind + "." + CRDGroupVersion.String() + VPC_GroupVersionKind = CRDGroupVersion.WithKind(VPC_Kind) +) + +func init() { + SchemeBuilder.Register(&VPC{}, &VPCList{}) +} diff --git a/apis/zz_register.go b/apis/zz_register.go index 22ffd12..493d52d 100755 --- a/apis/zz_register.go +++ b/apis/zz_register.go @@ -31,6 +31,7 @@ import ( v1alpha1apis "github.com/linode/provider-linode/apis/v1alpha1" v1beta1 "github.com/linode/provider-linode/apis/v1beta1" v1alpha1volume "github.com/linode/provider-linode/apis/volume/v1alpha1" + v1alpha1vpc "github.com/linode/provider-linode/apis/vpc/v1alpha1" ) func init() { @@ -53,6 +54,7 @@ func init() { v1alpha1apis.SchemeBuilder.AddToScheme, v1beta1.SchemeBuilder.AddToScheme, v1alpha1volume.SchemeBuilder.AddToScheme, + v1alpha1vpc.SchemeBuilder.AddToScheme, ) } diff --git a/cmd/provider/main.go b/cmd/provider/main.go index 9566223..2cffad1 100644 --- a/cmd/provider/main.go +++ b/cmd/provider/main.go @@ -60,12 +60,8 @@ func main() { zl := zap.New(zap.UseDevMode(*debug)) log := logging.NewLogrLogger(zl.WithName("provider-linode")) - if *debug { - // The controller-runtime runs with a no-op logger by default. It is - // *very* verbose even at info level, so we only provide it a real - // logger when we're running in debug mode. - ctrl.SetLogger(zl) - } + // The controller-runtime is unhappy if SetLogger is not called + ctrl.SetLogger(zl) // currently, we configure the jitter to be the 5% of the poll interval pollJitter := time.Duration(float64(*pollInterval) * 0.05) diff --git a/config/externalname.go b/config/externalname.go index 8f41bcb..3320c38 100644 --- a/config/externalname.go +++ b/config/externalname.go @@ -13,24 +13,25 @@ import ( // resources to be reconciled under the no-fork architecture for this // provider. var terraformPluginFrameworkExternalNameConfigs = map[string]config.ExternalName{ - "linode_token": config.IdentifierFromProvider, - "linode_stackscript": config.IdentifierFromProvider, - "linode_rdns": config.IdentifierFromProvider, - "linode_object_storage_key": config.IdentifierFromProvider, - "linode_sshkey": config.IdentifierFromProvider, - "linode_ipv6_range": config.IdentifierFromProvider, - "linode_nodebalancer": config.IdentifierFromProvider, - "linode_vpc_subnet": config.IdentifierFromProvider, - "linode_vpc": config.IdentifierFromProvider, - "linode_instance_ip": config.IdentifierFromProvider, - "linode_firewall_device": config.IdentifierFromProvider, - "linode_volume": config.IdentifierFromProvider, + "linode_token": config.IdentifierFromProvider, + "linode_stackscript": config.IdentifierFromProvider, + "linode_rdns": config.IdentifierFromProvider, + "linode_object_storage_key": config.IdentifierFromProvider, + "linode_sshkey": config.IdentifierFromProvider, + "linode_ipv6_range": config.IdentifierFromProvider, + "linode_nodebalancer": config.IdentifierFromProvider, + "linode_vpc_subnet": config.IdentifierFromProvider, + "linode_vpc": config.IdentifierFromProvider, + "linode_instance_ip": config.IdentifierFromProvider, + "linode_firewall_device": config.IdentifierFromProvider, + "linode_volume": config.IdentifierFromProvider, + "linode_instance_shared_ips": config.IdentifierFromProvider, } -// terraformPluginSDKIncludeList contains all external name configurations +// terraformSDKIncludeList contains all external name configurations // belonging to Terraform Plugin SDKv2 resources to be reconciled // under the no-fork architecture for this provider. -var terraformPluginSDKIncludeList = map[string]config.ExternalName{ +var terraformSDKIncludeList = map[string]config.ExternalName{ // Import requires using a randomly generated ID from provider: 1234567 "linode_database_access_controls": config.IdentifierFromProvider, "linode_database_mysql": config.IdentifierFromProvider, @@ -42,7 +43,6 @@ var terraformPluginSDKIncludeList = map[string]config.ExternalName{ "linode_instance": config.IdentifierFromProvider, "linode_instance_config": config.IdentifierFromProvider, "linode_instance_disk": config.IdentifierFromProvider, - "linode_instance_shared_ips": config.IdentifierFromProvider, "linode_lke_cluster": config.IdentifierFromProvider, "linode_nodebalancer_node": config.IdentifierFromProvider, "linode_nodebalancer_config": config.IdentifierFromProvider, @@ -79,7 +79,7 @@ func resourceConfigurator() config.ResourceOption { // Plugin SDKv2, which takes precedence over CLI architecture. e, configured := terraformPluginFrameworkExternalNameConfigs[r.Name] if !configured { - e, configured = terraformPluginSDKIncludeList[r.Name] + e, configured = terraformSDKIncludeList[r.Name] if !configured { e, configured = cliReconciledExternalNameConfigs[r.Name] } diff --git a/config/provider-metadata.yaml b/config/provider-metadata.yaml index 30457b6..144d16c 100644 --- a/config/provider-metadata.yaml +++ b/config/provider-metadata.yaml @@ -46,7 +46,7 @@ resources: } linode_instance.my-instance: |- { - "image": "linode/alpine3.14", + "image": "linode/alpine3.19", "label": "myinstance", "region": "us-southeast", "type": "g6-nanode-1" @@ -301,7 +301,7 @@ resources: dependencies: linode_instance.my_instance: |- { - "image": "linode/ubuntu18.04", + "image": "linode/ubuntu22.04", "label": "my_instance", "region": "us-southeast", "root_pass": "bogusPassword$", @@ -323,7 +323,7 @@ resources: ports: '- (Optional) A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").' protocol: '- (Required) The network protocol this rule controls. (TCP, UDP, ICMP)' status: '- The status of the Firewall.' - tags: '- (Optional) A list of tags applied to the Kubernetes cluster. Tags are for organizational purposes only.' + tags: '- (Optional) A list of tags applied to the Kubernetes cluster. Tags are case-insensitive and are for organizational purposes only.' type: '- The type of Firewall Device.' url: The URL of the underlying entity this device references. importStatements: [] @@ -447,12 +447,42 @@ resources: "authorized_keys": [ "ssh-rsa AAAA...Gw== user@example.local" ], - "group": "foo", - "image": "linode/ubuntu18.04", + "image": "linode/ubuntu22.04", + "label": "simple_instance", + "private_ip": true, + "region": "us-central", + "root_pass": "this-is-not-a-safe-password", + "swap_size": 256, + "tags": [ + "foo" + ], + "type": "g6-standard-1" + } + - name: web + manifest: |- + { + "authorized_keys": [ + "ssh-rsa AAAA...Gw== user@example.local" + ], + "image": "linode/ubuntu22.04", + "interface": [ + { + "purpose": "public" + }, + { + "ipv4": [ + { + "vpc": "10.0.4.250" + } + ], + "purpose": "vpc", + "subnet_id": 123 + } + ], "label": "simple_instance", "private_ip": true, "region": "us-central", - "root_pass": "terr4form-test", + "root_pass": "this-is-not-a-safe-password", "swap_size": 256, "tags": [ "foo" @@ -462,7 +492,6 @@ resources: - name: web manifest: |- { - "group": "foo", "label": "complex_instance", "private_ip": true, "region": "us-central", @@ -475,18 +504,14 @@ resources: linode_instance_config.boot_config: |- { "booted": true, - "devices": [ + "device": [ { - "sda": [ - { - "disk_id": "${linode_instance_disk.boot_disk.id}" - } - ], - "sdb": [ - { - "volume_id": "${linode_volume.web_volume.id}" - } - ] + "device_name": "sda", + "disk_id": "${linode_instance_disk.boot_disk.id}" + }, + { + "device_name": "sdb", + "volume_id": "${linode_volume.web_volume.id}" } ], "kernel": "linode/latest-64bit", @@ -502,7 +527,7 @@ resources: "authorized_users": [ "${data.linode_profile.me.username}" ], - "image": "linode/ubuntu18.04", + "image": "linode/ubuntu22.04", "label": "boot", "linode_id": "${linode_instance.web.id}", "root_pass": "terr4form-test", @@ -540,24 +565,32 @@ resources: distro: '- (Optional) Controls the behavior of the Linode Config''s Distribution Helper setting.' enabled: '- If this Linode has the Backup service enabled.' filesystem: '- (Optional) The Disk filesystem can be one of: "raw", "swap", "ext3", "ext4", or "initrd" which has a max size of 32mb and can be used in the config initrd (not currently supported in this Terraform Provider).' - group: '- (Optional) The display group of the Linode instance.' + firewall_id: '- (Optional) The ID of the Firewall to attach to the instance upon creation. Changing' + group: '- (Optional, Deprecated) A deprecated property denoting a group label for this Linode. We recommend using the tags attribute instead.' + has_user_data: '- Whether this Instance was created with user-data.' helpers: '- (Options) Helpers enabled when booting to this Linode Config.' id: '- (Computed) The ID of the disk in the Linode API.' - image: '- (Optional) 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' + image: '- (Optional) 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/debian12, linode/fedora39, linode/ubuntu22.04, linode/arch, and private/12345. See all images here (Requires a personal access token; docs here). This value can not be imported. Changing' ip_address: '- A string containing the Linode''s public IP address.' - ipam_address: '- (Optional) This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation.' + ip_ranges: '- IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program.' + ipam_address: '- (Optional) This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) This field is only allowed for interfaces with the vlan purpose.' ipv4: '- 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.' + ipv4.nat_1_1: '- (Optional) The public IP that will be used for the one-to-one NAT purpose. If this is any, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address.' + ipv4.vpc: '- (Optional) The IP from the VPC subnet to use for this interface. A random address will be assigned if this is not specified in a VPC interface.' ipv6: '- 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.' label: '- (Optional) The Linode''s label is for display purposes only. If no label is provided for a Linode, a default will be assigned.' + metadata.0.user_data: '- (Optional) The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field.' + migration_type: '- (Optional) The type of migration to use when updating the type or region of a Linode. (cold, warm; default cold)' modules_dep: '- (Optional) Creates a modules dependency file for the Kernel you run.' network: '- (Optional) Controls the behavior of the Linode Config''s Network Helper setting, used to automatically configure additional IP addresses assigned to this instance.' + primary: '- (Optional) Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the public or vpc purpose.' private_ip: '- (Optional) 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.' private_ip_address: '- 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.' - purpose: '- (Required) The type of interface. (public, vlan)' + purpose: '- (Required) The type of interface. (public, vlan, vpc)' read_only: '- (Optional) If true, this Disk is read-only.' region: '- (Required) This is the location where the Linode is deployed. Examples are "us-east", "us-west", "ap-south", etc. See all regions here. Changing .' resize_disk: '- (Optional) 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.' - root_pass: '- (Optional) The initial password for the root user account. This value can not be imported. Changing If omitted, a random password will be generated but will not be stored in Terraform state.' + root_pass: '- (Required with image) The initial password for the root user account. This value can not be imported. Changing If omitted, a random password will be generated but will not be stored in Terraform state.' sda.disk_id: '- (Computed) The Disk ID of the associated disk_label, if used.' sda.disk_label: '- (Optional) The label of the disk to map to this device slot.' sda.volume_id: '- (Optional) The Volume ID to map to this device slot.' @@ -567,16 +600,19 @@ resources: specs.0.memory: '- 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.' specs.0.transfer: '- The amount of network transfer this Linode is allotted each month.' specs.0.vcpus: '- 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.' - stackscript_data: '- (Optional) 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. This value can not be imported. Changing' - stackscript_id: '- (Optional) 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' + stackscript_data: '- (Optional with image) 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. This value can not be imported. Changing' + stackscript_id: '- (Optional with image) 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' status: '- The status of the instance, indicating the current readiness state. (running, offline, ...)' - swap_size: '- (Optional) 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.' - tags: '- (Optional) A list of tags applied to this object. Tags are for organizational purposes only.' + subnet_id: '- (Optional) The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the vpc purpose.' + swap_size: '- (Optional with image) 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.' + tags: '- (Optional) A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.' timeouts.create: '- (Defaults to 10 mins) Used when launching the instance (until it reaches the initial running state)' timeouts.delete: '- (Defaults to 10 mins) Used when terminating the instance' - timeouts.update: '- (Defaults to 20 mins) Used when stopping and starting the instance when necessary during update - e.g. when changing instance type' + timeouts.update: '- (Defaults to 1 hour) Used when stopping and starting the instance when necessary during update - e.g. when changing instance type' type: '- (Required) 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.' updatedb_disabled: '- (Optional) Disables updatedb cron job to avoid disk thrashing.' + vpc: purpose. + vpc_id: '- The ID of VPC which this interface is attached to.' watchdog_enabled: '- (Optional) 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.' window: '- The window (''W0''-''W22'') in which your backups will be taken, in UTC. A backups window is a two-hour span of time in which the backup may occur. For example, ''W10'' indicates that your backups should be taken between 10:00 and 12:00. If you do not choose a backup window, one will be selected for you automatically. If not set manually, when backups are initially enabled this may come back as Scheduling until the window is automatically selected.' importStatements: [] @@ -590,20 +626,17 @@ resources: manifest: |- { "booted": true, - "devices": [ + "device": [ { - "sda": [ - { - "disk_id": "${linode_instance_disk.boot.id}" - } - ] + "device_name": "sda", + "disk_id": "${linode_instance_disk.boot.id}" } ], "label": "my-config", "linode_id": "${linode_instance.my-instance.id}" } references: - devices.sda.disk_id: linode_instance_disk.boot.id + device.disk_id: linode_instance_disk.boot.id linode_id: linode_instance.my-instance.id dependencies: linode_instance.my-instance: |- @@ -614,7 +647,7 @@ resources: } linode_instance_disk.boot: |- { - "image": "linode/ubuntu20.04", + "image": "linode/ubuntu22.04", "label": "boot", "linode_id": "${linode_instance.my-instance.id}", "root_pass": "myc00lpass!", @@ -627,22 +660,18 @@ resources: "connection": [ { "host": "${linode_instance.my-instance.ip_address}", - "password": "myc00lpass!", + "password": "myc00lpass!ciuw23asxbviwuc", "user": "root" } ], - "devices": [ + "device": [ { - "sda": [ - { - "disk_id": "${linode_instance_disk.boot.id}" - } - ], - "sdb": [ - { - "disk_id": "${linode_instance_disk.swap.id}" - } - ] + "device_name": "sda", + "disk_id": "${linode_instance_disk.boot.id}" + }, + { + "device_name": "sdb", + "disk_id": "${linode_instance_disk.swap.id}" } ], "helpers": [ @@ -658,6 +687,15 @@ resources: "ipam_address": "10.0.0.2/24", "label": "my-vlan", "purpose": "vlan" + }, + { + "ipv4": [ + { + "vpc": "10.0.4.250" + } + ], + "purpose": "vpc", + "subnet_id": "${linode_vpc_subnet.foobar.id}" } ], "label": "my-config", @@ -674,22 +712,22 @@ resources: } references: connection.host: linode_instance.my-instance.ip_address - devices.sda.disk_id: linode_instance_disk.boot.id - devices.sdb.disk_id: linode_instance_disk.swap.id + device.disk_id: linode_instance_disk.swap.id + interface.subnet_id: linode_vpc_subnet.foobar.id linode_id: linode_instance.my-instance.id dependencies: linode_instance.my-instance: |- { "label": "my-instance", - "region": "us-southeast", + "region": "us-mia", "type": "g6-standard-1" } linode_instance_disk.boot: |- { - "image": "linode/ubuntu20.04", + "image": "linode/ubuntu22.04", "label": "boot", "linode_id": "${linode_instance.my-instance.id}", - "root_pass": "myc00lpass!", + "root_pass": "myc00lpass!ciuw23asxbviwuc", "size": "${linode_instance.my-instance.specs.0.disk - 512}" } linode_instance_disk.swap: |- @@ -699,26 +737,45 @@ resources: "linode_id": "${linode_instance.my-instance.id}", "size": 512 } + linode_vpc.foobar: |- + { + "description": "test description", + "label": "my-vpc", + "region": "us-mia" + } + linode_vpc_subnet.foobar: |- + { + "ipv4": "10.0.4.0/24", + "label": "my-subnet", + "vpc_id": "${linode_vpc.foobar.id}" + } argumentDocs: booted: '- (Optional) 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.' comments: '- (Optional) Optional field for arbitrary User comments on this Config.' devtmpfs_automount: '- (Optional) Populates the /dev directory early during boot without udev. (default true)' distro: '- (Optional) Helps maintain correct inittab/upstart console device. (default true)' - ipam_address: '- (Optional) This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24)' - kernel: '- (Optional) A Kernel ID to boot a Linode with. (default linode/latest-64bit)' + ip_ranges: '- (Optional) IPv4 CIDR VPC Subnet ranges that are routed to this Interface. IPv6 ranges are also available to select participants in the Beta program.' + ipam_address: '- (Optional) This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. (e.g. 10.0.0.1/24) This field is only allowed for interfaces with the vlan purpose.' + ipv4.nat_1_1: '- (Optional) The public IP that will be used for the one-to-one NAT purpose. If this is any, the public IPv4 address assigned to this Linode is used on this interface and will be 1:1 NATted with the VPC IPv4 address.' + ipv4.vpc: '- (Optional) The IP from the VPC subnet to use for this interface. A random address will be assigned if this is not specified in a VPC interface.' + kernel: '- (Optional) A Kernel ID to boot a Linode with. Default is linode/latest-64bit. Examples are linode/latest-64bit, linode/grub2, linode/direct-disk, etc. See all kernels here. Note that this is a paginated API endpoint (docs).' label: '- (Required) The Config’s label for display purposes only.' linode_id: '- (Required) The ID of the Linode to create this configuration profile under.' memory_limit: '- (Optional) The memory limit of the Config. Defaults to the total ram of the Linode.' modules_dep: '- (Optional) Creates a modules dependency file for the Kernel you run. (default true)' network: '- (Optional) Automatically configures static networking. (default true)' - purpose: '- (Required) The type of interface. (public, vlan)' + primary: '- (Optional) Whether the interface is the primary interface that should have the default route for this Linode. This field is only allowed for interfaces with the public or vpc purpose.' + purpose: '- (Required) The type of interface. (public, vlan, vpc)' root_device: '- (Optional) The root device to boot. (default /dev/sda)' run_level: '- (Optional) Defines the state of your Linode after booting. (default, single, binbash)' sda: '... sdh - (Optional) 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.' sda.disk_id: '- (Optional) The Disk ID to map to this device slot' sda.volume_id: '- (Optional) The Volume ID to map to this device slot.' + subnet_id: '- (Optional) The name of the VPC Subnet to join. This field is only allowed and required for interfaces with the vpc purpose.' updatedb_disabled: '- (Optional) Disables updatedb cron job to avoid disk thrashing. (default true)' virt_mode: '- (Optional) Controls the virtualization mode. (paravirt, fullvirt)' + vpc: purpose. + vpc_id: '- The ID of VPC which this interface is attached to.' importStatements: [] linode_instance_disk: subCategory: "" @@ -749,7 +806,7 @@ resources: "authorized_keys": [ "ssh-rsa AAAA...Gw== user@example.local" ], - "image": "linode/ubuntu20.04", + "image": "linode/ubuntu22.04", "label": "boot", "linode_id": "${linode_instance.my-instance.id}", "root_pass": "myc00lpass!", @@ -770,17 +827,17 @@ resources: "type": "g6-standard-1" } argumentDocs: - authorized_keys: '- (Optional) 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.' - authorized_users: '- (Optional) A list of usernames. If the usernames have associated SSH keys, the keys will be appended to the' + authorized_keys: '- (Optional) 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. (Requires image)' + authorized_users: '- (Optional) A list of usernames. If the usernames have associated SSH keys, the keys will be appended to the root user''s ~/.ssh/authorized_keys file. (Requires image)' created: '- When this disk was created.' filesystem: '- (Optional) The filesystem of this disk. (raw, swap, ext3, ext4, initrd)' image: '- (Optional) An Image ID to deploy the Linode Disk from.' label: '- (Required) The Disk''s label for display purposes only.' linode_id: '- (Required) The ID of the Linode to create this Disk under.' - root_pass: '- (Optional) The root user’s password on a newly-created Linode Disk when deploying from an Image.' + root_pass: '- (Optional) The root user’s password on a newly-created Linode Disk when deploying from an Image. (Requires image)' size: '- (Required) The size of the Disk in MB. NOTE: Resizing a disk will trigger a Linode reboot.' - stackscript_data: '- (Optional) 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.' - stackscript_id: '- (Optional) A StackScript ID that will cause the referenced StackScript to be run during deployment of this Disk.' + stackscript_data: '- (Optional) 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. (Requires image)' + stackscript_id: '- (Optional) A StackScript ID that will cause the referenced StackScript to be run during deployment of this Disk. (Requires image)' status: '- A brief description of this Disk''s current state.' updated: '- When this disk was last updated.' importStatements: [] @@ -801,7 +858,7 @@ resources: dependencies: linode_instance.foo: |- { - "image": "linode/alpine3.16", + "image": "linode/alpine3.19", "label": "foobar-test", "region": "us-east", "type": "g6-nanode-1" @@ -934,7 +991,7 @@ resources: dependencies: linode_instance.foobar: |- { - "image": "linode/alpine3.14", + "image": "linode/alpine3.19", "label": "my-linode", "region": "us-southeast", "type": "g6-nanode-1" @@ -957,7 +1014,7 @@ resources: - name: my-cluster manifest: |- { - "k8s_version": "1.21", + "k8s_version": "1.28", "label": "my-cluster", "pool": [ { @@ -973,15 +1030,8 @@ resources: - name: my-cluster manifest: |- { - "k8s_version": "1.21", + "k8s_version": "1.28", "label": "my-cluster", - "lifecycle": [ - { - "ignore_changes": [ - "${pool.0.count}" - ] - } - ], "pool": [ { "autoscaler": [ @@ -990,7 +1040,6 @@ resources: "min": 3 } ], - "count": 3, "type": "g6-standard-2" } ], @@ -999,6 +1048,30 @@ resources: "prod" ] } + - name: my-cluster + manifest: |- + { + "pool": [ + { + "count": 2, + "type": "g6-standard-1" + }, + { + "count": 3, + "type": "g6-standard-2" + } + ] + } + - name: my-cluster + manifest: |- + { + "pool": [ + { + "count": 3, + "type": "g6-standard-2" + } + ] + } argumentDocs: api_endpoints: '- The endpoints for the Kubernetes API server.' autoscaler.max: '- (Required) The maximum number of nodes to autoscale to.' @@ -1011,11 +1084,11 @@ resources: kubeconfig: '- The base64 encoded kubeconfig for the Kubernetes cluster.' label: '- (Required) This Kubernetes cluster''s unique label.' pool: '- Additional nested attributes:' - pool.count: '- (Required) The number of nodes in the Node Pool.' + pool.count: '- (Required; Optional with autoscaler) The number of nodes in the Node Pool. If undefined with an autoscaler the initial node count will equal the autoscaler minimum.' pool.type: '- (Required) A Linode Type for all of the nodes in the Node Pool. See all node types here.' region: '- (Required) This Kubernetes cluster''s location.' status: '- The status of the cluster.' - tags: '- (Optional) An array of tags applied to the Kubernetes cluster. Tags are for organizational purposes only.' + tags: '- (Optional) An array of tags applied to the Kubernetes cluster. Tags are case-insensitive and are for organizational purposes only.' importStatements: [] linode_nodebalancer: subCategory: "" @@ -1034,16 +1107,23 @@ resources: ] } argumentDocs: + action: '- 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.' client_conn_throttle: '- (Optional) Throttle connections per second (0-20). Set to 0 (default) to disable throttling.' created: '- When this NodeBalancer was created' hostname: '- This NodeBalancer''s hostname, ending with .nodebalancer.linode.com' + id: '- (Required) The Firewall''s ID.' in: '- The total transfer, in MB, used by this NodeBalancer for the current month' + inbound_policy: '- The default behavior for inbound traffic. (ACCEPT, DROP)' ipv4: '- The Public IPv4 Address of this NodeBalancer' ipv6: '- The Public IPv6 Address of this NodeBalancer' label: '- (Optional) The label of the Linode NodeBalancer' out: '- The total inbound transfer, in MB, used for this NodeBalancer for the current month' + outbound_policy: '- The default behavior for outbound traffic. (ACCEPT, DROP)' + ports: '- A string representation of ports and/or port ranges (i.e. "443" or "80-90, 91").' + protocol: '- The network protocol this rule controls. (TCP, UDP, ICMP)' region: '- (Required) The region where this NodeBalancer will be deployed. Examples are "us-east", "us-west", "ap-south", etc. See all regions here. Changing .' - tags: '- (Optional) A list of tags applied to this object. Tags are for organizational purposes only.' + status: '- The status of the firewall. (enabled, disabled, deleted)' + tags: '- (Optional) A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.' total: '- The total outbound transfer, in MB, used for this NodeBalancer for the current month' updated: '- When this NodeBalancer was last updated.' importStatements: [] @@ -1110,6 +1190,13 @@ resources: "config_id": "${linode_nodebalancer_config.foofig.id}", "count": "3", "label": "mynodebalancernode", + "lifecycle": [ + { + "replace_triggered_by": [ + "${linode_instance.foo.id}" + ] + } + ], "nodebalancer_id": "${linode_nodebalancer.foobar.id}", "weight": 50 } @@ -1123,7 +1210,7 @@ resources: "ssh-rsa AAAA...Gw== user@example.local" ], "count": "3", - "image": "linode/ubuntu18.04", + "image": "linode/ubuntu22.04", "label": "web-${count.index + 1}", "private_ip": true, "region": "us-east", @@ -1284,6 +1371,7 @@ resources: content_encoding: '- (Optional) 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.' content_language: '- (Optional) The language the content is in e.g. en-US or en-GB.' content_type: '- (Optional) 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.' + endpoint: '- (Optional) Used with the s3 client to make bucket changes and will be computed automatically if left blank, override for testing/debug purposes.' etag: '- (Optional) Used to trigger updates. The only meaningful value is ${filemd5("path/to/file")} (Terraform 0.11.12 or later) or ${md5(file("path/to/file"))} (Terraform 0.11.11 or earlier).' force_destroy: '- (Optional) Allow the object to be deleted regardless of any legal hold or object lock (defaults to false).' key: '- (Required) They name of the object once it is in the bucket.' @@ -1310,7 +1398,7 @@ resources: dependencies: linode_instance.foo: |- { - "image": "linode/alpine3.9", + "image": "linode/alpine3.19", "region": "ca-east", "type": "g6-dedicated-2" } @@ -1325,7 +1413,7 @@ resources: linode_instance.my_instance: |- { "count": 3, - "image": "linode/ubuntu18.04", + "image": "linode/ubuntu22.04", "label": "simple_instance-${count.index + 1}", "region": "us-central", "root_pass": "terr4form-test", @@ -1354,7 +1442,7 @@ resources: "authorized_keys": [ "${linode_sshkey.foo.ssh_key}" ], - "image": "linode/ubuntu18.04", + "image": "linode/ubuntu22.04", "label": "foo", "region": "us-east", "root_pass": "...", @@ -1376,8 +1464,8 @@ resources: { "description": "Installs a Package", "images": [ - "linode/ubuntu18.04", - "linode/ubuntu16.04lts" + "linode/ubuntu22.04", + "linode/ubuntu20.04" ], "label": "foo", "rev_note": "initial version", @@ -1389,7 +1477,7 @@ resources: "authorized_keys": [ "..." ], - "image": "linode/ubuntu18.04", + "image": "linode/ubuntu22.04", "label": "foo", "region": "us-east", "root_pass": "...", @@ -1482,7 +1570,7 @@ resources: "username": "cooluser123" } argumentDocs: - account-access: '- (optional) The level of access this User has to Account-level actions, like billing information. (read_only, read_write)' + account_access: '- (optional) The level of access this User has to Account-level actions, like billing information. (read_only, read_write)' add_databases: '- (optional) If true, this User may add Databases.' add_domains: '- (optional) If true, this User may add Domains.' add_firewalls: '- (optional) If true, this User may add Firewalls.' @@ -1549,8 +1637,51 @@ resources: size: '- (Optional) Size of the Volume in GB.' source_volume_id: '- (Optional) The ID of a Linode Volume to clone. NOTE: Cloned volumes must be in the same region as the source volume.' status: '- The status of the Linode Volume. (creating, active, resizing, contact_support)' - tags: '- (Optional) A list of tags applied to this object. Tags are for organizational purposes only.' + tags: '- (Optional) A list of tags applied to this object. Tags are case-insensitive and are for organizational purposes only.' timeouts.create: '- (Defaults to 10 mins) Used when creating the volume (until the volume is reaches the initial active state)' timeouts.delete: '- (Defaults to 10 mins) Used when deleting the volume' timeouts.update: '- (Defaults to 20 mins) Used when updating the volume when necessary during update - e.g. when resizing the volume' importStatements: [] + linode_vpc: + subCategory: "" + description: Manages a Linode VPC. + name: linode_vpc + title: linode_vpc + examples: + - name: test + manifest: |- + { + "description": "My first VPC.", + "label": "test-vpc", + "region": "us-iad" + } + argumentDocs: + created: '- The date and time when the VPC was created.' + description: '- (Optional) The user-defined description of this VPC.' + id: '- The ID of the VPC.' + label: '- (Required) The label of the VPC. This field can only contain ASCII letters, digits and dashes.' + region: '- (Required) The region of the VPC.' + updated: '- The date and time when the VPC was last updated.' + importStatements: [] + linode_vpc_subnet: + subCategory: "" + description: Manages a Linode VPC subnet. + name: linode_vpc_subnet + title: linode_vpc_subnet + examples: + - name: test + manifest: |- + { + "ipv4": "10.0.0.0/24", + "label": "test-subnet", + "vpc_id": 123 + } + argumentDocs: + created: '- The date and time when the VPC was created.' + id: '- The ID of the VPC Subnet.' + ipv4: '- (Required) The IPv4 range of this subnet in CIDR format.' + label: '- (Required) The label of the VPC. Only contains ASCII letters, digits and dashes.' + linodes: '- A list of Linode IDs that added to this subnet.' + updated: '- The date and time when the VPC was last updated.' + vpc_id: '- (Required) The id of the parent VPC for this VPC Subnet.' + importStatements: [] diff --git a/config/provider.go b/config/provider.go index 64988f0..ae33f81 100644 --- a/config/provider.go +++ b/config/provider.go @@ -44,6 +44,8 @@ import ( "github.com/linode/provider-linode/config/token" "github.com/linode/provider-linode/config/user" "github.com/linode/provider-linode/config/volume" + "github.com/linode/provider-linode/config/vpc" + "github.com/linode/provider-linode/config/vpcsubnet" ) const ( @@ -103,7 +105,7 @@ func GetProvider(_ context.Context, generationProvider bool) (*config.Provider, resourceConfigurator(), ), config.WithIncludeList(resourceList(cliReconciledExternalNameConfigs)), - config.WithTerraformPluginSDKIncludeList(resourceList(terraformPluginSDKIncludeList)), + config.WithTerraformPluginSDKIncludeList(resourceList(terraformSDKIncludeList)), config.WithTerraformPluginFrameworkIncludeList(resourceList(terraformPluginFrameworkExternalNameConfigs)), config.WithTerraformProvider(p), config.WithTerraformPluginFrameworkProvider(fwProvider), @@ -138,6 +140,8 @@ func GetProvider(_ context.Context, generationProvider bool) (*config.Provider, token.Configure, user.Configure, volume.Configure, + vpc.Configure, + vpcsubnet.Configure, } { configure(pc) } diff --git a/config/schema.json b/config/schema.json index 77c6e21..db8a0f0 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":"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_implicit_reboots":{"type":"bool","description":"If true, Linode Instances will not be rebooted on config and interface changes.","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":"The email of the current account.","description_kind":"plain","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_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.30)","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. mysql/8.0.30)","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":{"created":{"type":"string","description":"When this firewall was created","description_kind":"plain","computed":true},"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},"nodebalancers":{"type":["set","number"],"description":"The IDs of NodeBalancers 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},"updated":{"type":"string","description":"When this firewall was last updated","description_kind":"plain","computed":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 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 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":{"capabilities":{"type":["list","string"],"description":"The capabilities of this Image.","description_kind":"plain","computed":true},"cloud_init":{"type":"bool","description":"Whether this image supports cloud-init.","description_kind":"plain","optional":true},"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},"has_user_data":{"type":"bool","description":"Whether or not this Instance was created with user-data.","description_kind":"plain","computed":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","deprecated":true}},"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","deprecated":true}},"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"}},"metadata":{"nesting_mode":"list","block":{"attributes":{"user_data":{"type":"string","description":"The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field.","description_kind":"plain","optional":true}},"description":"Various fields related to the Linode Metadata service.","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":{"device":{"nesting_mode":"set","block":{"attributes":{"device_name":{"type":"string","description":"The Disk ID to map to this disk slot","description_kind":"plain","required":true},"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":"Blocks for device disks in a Linode's configuration profile.","description_kind":"plain"}},"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","deprecated":true},"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. This functionality is not affected by the `skip_implicit_reboots` provider argument.","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":"The unique ID for this Resource.","description_kind":"plain","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,"computed":true},"created":{"type":"string","description":"When this NodeBalancer was created.","description_kind":"plain","computed":true},"firewall_id":{"type":"number","description":"ID for the firewall you'd like to use with this NodeBalancer.","description_kind":"plain","optional":true},"hostname":{"type":"string","description":"This NodeBalancer's hostname, ending with .nodebalancer.linode.com","description_kind":"plain","computed":true},"id":{"type":"string","description":"The unique ID of the Linode NodeBalancer.","description_kind":"plain","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","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,"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","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":"The unique ID of this Object Storage key.","description_kind":"plain","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":"set","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":"Unique identification field for this RDNS Resource. The public Linode IPv4 or IPv6 address to operate on. ","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","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,"computed":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":"The unique identifier for this SSH key.","description_kind":"plain","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":"The StackScript's unique ID.","description_kind":"plain","computed":true},"images":{"type":["set","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,"computed":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,"computed":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","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:05Z","description_kind":"plain","optional":true,"computed":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":"The Email of the Account.","description_kind":"plain","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":"True 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":"The data source's unique ID.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"logins":{"nesting_mode":"list","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":"True 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":"The returned list of account logins.","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":"The email of the current account.","description_kind":"plain","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":{"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":"number","description":"The data source's unique ID.","description_kind":"plain","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":{"backups":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"A time value given in a combined date and time format that represents when the database backup was created.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The ID of the database backup object.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The database backup’s label, for display purposes only.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The type of database backup, determined by how the backup was created.","description_kind":"plain","computed":true}},"description":"The returned list of backups.","description_kind":"plain"}},"filter":{"nesting_mode":"set","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":["set","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":{"id":{"type":"string","description":"The data source's unique ID.","description_kind":"plain","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":{"engines":{"nesting_mode":"list","block":{"attributes":{"engine":{"type":"string","description":"The Managed Database engine type.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The Managed Database engine ID in engine/version format.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","description_kind":"plain","computed":true}},"description":"The returned list of engines.","description_kind":"plain"}},"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"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. DEPRECATED: Use ID instead","description_kind":"plain","deprecated":true,"optional":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.30)","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":"number","description":"Unique identifier for this DataSource. The ID of the MySQL database.","description_kind":"plain","optional":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 PostgreSQL database. DEPRECATED: Use ID instead","description_kind":"plain","deprecated":true,"optional":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":"number","description":"Unique identifier for this DataSource. The ID of the PostgreSQL database.","description_kind":"plain","optional":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":{"id":{"type":"string","description":"The data source's unique ID.","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":{"databases":{"nesting_mode":"list","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},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database.","description_kind":"plain","computed":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","computed":true},"engine":{"type":"string","description":"The Managed Database engine type.","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/private host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"number","description":"A unique ID that can be used to identify and reference the Managed Database.","description_kind":"plain","computed":true},"instance_uri":{"type":"string","description":"he API route for the database instance.","description_kind":"plain","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 ID 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},"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},"version":{"type":"string","description":"The Managed Database engine version.","description_kind":"plain","computed":true}},"description":"The returned list of databases.","description_kind":"plain"}},"filter":{"nesting_mode":"set","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":["set","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 our system; you cannot have two Domains 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 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","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":"number","description":"The Domain's unique ID.","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 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","computed":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","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 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","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":"The unique ID for this DataSource","description_kind":"plain","computed":true},"zone_file":{"type":["list","string"],"description":"Lines of the zone file for the last rendered zone for this domain.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_firewall":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"When this Firewall was created.","description_kind":"plain","computed":true},"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 assigned to this Firewall.","description_kind":"plain","computed":true},"nodebalancers":{"type":["set","number"],"description":"The IDs of NodeBalancers assigned to this Firewall.","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},"updated":{"type":"string","description":"When this Firewall was last updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_firewalls":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"firewalls":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"When this Firewall was created.","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","computed":true},"inbound_policy":{"type":"string","description":"The default behavior for inbound traffic.","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 assigned to this Firewall.","description_kind":"plain","computed":true},"nodebalancers":{"type":["set","number"],"description":"The IDs of NodeBalancers assigned to this Firewall..","description_kind":"plain","computed":true},"outbound_policy":{"type":"string","description":"The default behavior for outbound traffic.","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},"updated":{"type":"string","description":"When this Firewall was last updated.","description_kind":"plain","computed":true}},"block_types":{"devices":{"nesting_mode":"list","block":{"attributes":{"entity_id":{"type":"number","description":"The ID of the underlying entity this device references (i.e. the Linode's ID).","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID of the Firewall Device.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of the underlying entity this device references.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The type of Firewall Device.","description_kind":"plain","computed":true},"url":{"type":"string","description":"The URL of the underlying entity this device references.","description_kind":"plain","computed":true}},"description":"The devices associated with this firewall.","description_kind":"plain"}},"inbound":{"nesting_mode":"list","block":{"attributes":{"action":{"type":"string","description":"Controls whether traffic is accepted or dropped by this rule (ACCEPT, DROP).","description_kind":"plain","computed":true},"ipv4":{"type":["set","string"],"description":"A list of IPv4 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"ipv6":{"type":["set","string"],"description":"A list of IPv6 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of this rule for display purposes only.","description_kind":"plain","computed":true},"ports":{"type":"string","description":"A string representation of ports and/or port ranges (i.e. \"443\" or \"80-90, 91\").","description_kind":"plain","computed":true},"protocol":{"type":"string","description":"The network protocol this rule controls. (TCP, UDP, ICMP)","description_kind":"plain","computed":true}},"description":"A set of firewall rules that specify 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 (ACCEPT, DROP).","description_kind":"plain","computed":true},"ipv4":{"type":["set","string"],"description":"A list of IPv4 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"ipv6":{"type":["set","string"],"description":"A list of IPv6 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of this rule for display purposes only.","description_kind":"plain","computed":true},"ports":{"type":"string","description":"A string representation of ports and/or port ranges (i.e. \"443\" or \"80-90, 91\").","description_kind":"plain","computed":true},"protocol":{"type":"string","description":"The network protocol this rule controls. (TCP, UDP, ICMP)","description_kind":"plain","computed":true}},"description":"A set of firewall rules that specify what outbound network traffic is allowed.","description_kind":"plain"}}},"description":"The returned list of Firewalls.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_image":{"version":0,"block":{"attributes":{"capabilities":{"type":["set","string"],"description":"The capabilities of this Image.","description_kind":"plain","computed":true},"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":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"images":{"nesting_mode":"list","block":{"attributes":{"capabilities":{"type":["set","string"],"description":"The capabilities of this Image.","description_kind":"plain","computed":true},"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":"The returned list of Images.","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":"number","description":"The ID of the Backup","description_kind":"plain","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":"Unique identifier for this DataSource.","description_kind":"plain","computed":true},"ipv4":{"type":["list",["object",{"private":["list",["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]],"public":["list",["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]],"reserved":["list",["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","rdns":"string","region":"string","subnet_mask":"string","type":"string"}]],"shared":["list",["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","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":["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","rdns":"string","region":"string","subnet_mask":"string","type":"string"}],"slaac":["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","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"}]],"region_prices":["list",["object",{"hourly":"number","id":"string","monthly":"number"}]]}]]}]],"description":"Information about the optional Backup service offered for Linodes.","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},"region_prices":{"type":["list",["object",{"hourly":"number","id":"string","monthly":"number"}]],"description":"A list of region-specific prices for this plan.","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":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"types":{"nesting_mode":"list","block":{"attributes":{"addons":{"type":["list",["object",{"backups":["list",["object",{"price":["list",["object",{"hourly":"number","monthly":"number"}]],"region_prices":["list",["object",{"hourly":"number","id":"string","monthly":"number"}]]}]]}]],"description":"Information about the optional Backup service offered for Linodes.","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},"region_prices":{"type":["list",["object",{"hourly":"number","id":"string","monthly":"number"}]],"description":"A list of region-specific prices for this plan.","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":"The returned list of instance types.","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","has_user_data":"bool","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":"The unique ID for this DataSource","description_kind":"plain","computed":true},"is_bgp":{"type":"bool","description":"Whether this IPv6 range is shared.","description_kind":"plain","computed":true},"linodes":{"type":["set","number"],"description":"The IDs of Linodes to apply this firewall to.","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},"built":{"type":"string","description":"The date on which this Kernel was built.","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_kernels":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"kernels":{"nesting_mode":"list","block":{"attributes":{"architecture":{"type":"string","description":"The architecture of this Kernel.","description_kind":"plain","computed":true},"built":{"type":"string","description":"The date on which this Kernel was built.","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":"The returned list of Kernels.","description_kind":"plain"}}},"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":"Unique identification field for this list of LKE Versions.","description_kind":"plain","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":"A unique identifier for this datasource.","description_kind":"plain","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_nodebalancers":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"nodebalancers":{"nesting_mode":"list","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":"The returned list of NodeBalancers.","description_kind":"plain"}}},"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","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","computed":true},"static_site_domain":{"type":"string","description":"The base URL for this cluster used when hosting static sites.","description_kind":"plain","computed":true},"status":{"type":"string","description":"This cluster's status.","description_kind":"plain","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":"Unique identification field for this datasource.","description_kind":"plain","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":["set","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","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},"status":{"type":"string","description":"This region’s current operational status.","description_kind":"plain","computed":true}},"block_types":{"resolvers":{"nesting_mode":"list","block":{"attributes":{"ipv4":{"type":"string","description":"The IPv4 addresses for this region’s DNS resolvers, separated by commas.","description_kind":"plain","computed":true},"ipv6":{"type":"string","description":"The IPv6 addresses for this region’s DNS resolvers, separated by commas.","description_kind":"plain","computed":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_regions":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"regions":{"nesting_mode":"list","block":{"attributes":{"capabilities":{"type":["set","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","computed":true},"id":{"type":"string","description":"The unique ID of this Region.","description_kind":"plain","computed":true},"label":{"type":"string","description":"Detailed location information for this Region, including city, state or region, and country.","description_kind":"plain","computed":true},"status":{"type":"string","description":"This region’s current operational status.","description_kind":"plain","computed":true}},"block_types":{"resolvers":{"nesting_mode":"list","block":{"attributes":{"ipv4":{"type":"string","description":"The IPv4 addresses for this region’s DNS resolvers, separated by commas.","description_kind":"plain","computed":true},"ipv6":{"type":"string","description":"The IPv6 addresses for this region’s DNS resolvers, separated by commas.","description_kind":"plain","computed":true}},"description_kind":"plain"}}},"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":"A unique identifier for this datasource.","description_kind":"plain","optional":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_sshkeys":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"sshkeys":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"The date this key was added.","description_kind":"plain","computed":true},"id":{"type":"string","description":"A unique identifier for this datasource.","description_kind":"plain","optional":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":"The returned list of SSH Keys.","description_kind":"plain"}}},"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":"string","description":"The StackScript's unique ID.","description_kind":"plain","required":true},"images":{"type":["set","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","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":"The data source's unique ID.","description_kind":"plain","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}},"block_types":{"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"stackscripts":{"nesting_mode":"list","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":"string","description":"The StackScript's unique ID.","description_kind":"plain","required":true},"images":{"type":["set","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","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":"The returned list of StackScripts.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_user":{"version":0,"block":{"attributes":{"database_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"domain_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"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},"firewall_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"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":"Unique identifier for this DataSource.","description_kind":"plain","computed":true},"image_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"linode_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"longview_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"nodebalancer_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"password_created":{"type":"string","description":"The date and time when this User’s current password was created.User passwords are first created during the Account sign-up process, and updated using the Reset Password webpage.null if this User has not created a password yet.","description_kind":"plain","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},"stackscript_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"tfa_enabled":{"type":"bool","description":"A boolean value indicating if the User has Two Factor Authentication (TFA) enabled.","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},"verified_phone_number":{"type":"string","description":"The phone number verified for this User Profile with the Phone Number Verify command.null if this User Profile has no verified phone number.","description_kind":"plain","computed":true},"volume_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"linode_users":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"users":{"nesting_mode":"list","block":{"attributes":{"database_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"domain_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"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},"firewall_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"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":"Unique identifier for this DataSource.","description_kind":"plain","computed":true},"image_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"linode_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"longview_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"nodebalancer_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"password_created":{"type":"string","description":"The date and time when this User’s current password was created.User passwords are first created during the Account sign-up process, and updated using the Reset Password webpage.null if this User has not created a password yet.","description_kind":"plain","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},"stackscript_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"tfa_enabled":{"type":"bool","description":"A boolean value indicating if the User has Two Factor Authentication (TFA) enabled.","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},"verified_phone_number":{"type":"string","description":"The phone number verified for this User Profile with the Phone Number Verify command.null if this User Profile has no verified phone number.","description_kind":"plain","computed":true},"volume_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true}},"description":"The returned list of Users.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_vlans":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"vlans":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"When this VLAN was created.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The unique label of this VLAN.","description_kind":"plain","computed":true},"linodes":{"type":["set","number"],"description":"The Linodes currently attached to this VLAN.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region this VLAN is located in.","description_kind":"plain","computed":true}},"description":"The returned list of VLANs.","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"}},"linode_volumes":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"volumes":{"nesting_mode":"list","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":"The return list of Volumes.","description_kind":"plain"}}},"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_implicit_reboots":{"type":"bool","description":"If true, Linode Instances will not be rebooted on config and interface changes.","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":"The email of the current account.","description_kind":"plain","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_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.30)","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. mysql/8.0.30)","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,"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 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":{"created":{"type":"string","description":"When this firewall was created","description_kind":"plain","computed":true},"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},"nodebalancers":{"type":["set","number"],"description":"The IDs of NodeBalancers 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,"computed":true},"updated":{"type":"string","description":"When this firewall was last updated","description_kind":"plain","computed":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 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 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,"computed":true},"firewall_id":{"type":"number","description":"The ID of the Firewall to access.","description_kind":"plain","required":true},"id":{"type":"string","description":"The unique ID that represents the firewall device in the Terraform state.","description_kind":"plain","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":{"capabilities":{"type":["list","string"],"description":"The capabilities of this Image.","description_kind":"plain","computed":true},"cloud_init":{"type":"bool","description":"Whether this image supports cloud-init.","description_kind":"plain","optional":true},"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},"firewall_id":{"type":"number","description":"The ID of the firewall applied to the Linode instance during creation.","description_kind":"plain","optional":true},"group":{"type":"string","description":"The display group of the Linode instance.","description_kind":"plain","deprecated":true,"optional":true},"has_user_data":{"type":"bool","description":"Whether or not this Instance was created with user-data.","description_kind":"plain","computed":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},"migration_type":{"type":"string","description":"The type of migration to use for resize and migration operations.","description_kind":"plain","optional":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 initially 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,"computed":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},"id":{"type":"number","description":"The unique ID of this Config.","description_kind":"plain","computed":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":{"active":{"type":"bool","description":"Whether this interface is currently booted and active.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The ID of the interface.","description_kind":"plain","computed":true},"ip_ranges":{"type":["list","string"],"description":"List of VPC IPs or IP ranges inside the VPC subnet.","description_kind":"plain","optional":true},"ipam_address":{"type":"string","description":"This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces.","description_kind":"plain","optional":true},"primary":{"type":"bool","description":"Whether the interface is the primary interface that should have the default route for this Linode.","description_kind":"plain","optional":true},"purpose":{"type":"string","description":"The type of interface.","description_kind":"plain","required":true},"subnet_id":{"type":"number","description":"The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces.","description_kind":"plain","optional":true},"vpc_id":{"type":"number","description":"The ID of VPC of the subnet which the VPC interface is connected to.","description_kind":"plain","computed":true}},"block_types":{"ipv4":{"nesting_mode":"list","block":{"attributes":{"nat_1_1":{"type":"string","description":"The public IP that will be used for the one-to-one NAT purpose.","description_kind":"plain","optional":true,"computed":true},"vpc":{"type":"string","description":"The IP from the VPC subnet to use for this interface.","description_kind":"plain","optional":true,"computed":true}},"description":"The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces.","description_kind":"plain"},"max_items":1}},"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","deprecated":true}},"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","deprecated":true}},"interface":{"nesting_mode":"list","block":{"attributes":{"active":{"type":"bool","description":"Whether this interface is currently booted and active.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The ID of the interface.","description_kind":"plain","computed":true},"ip_ranges":{"type":["list","string"],"description":"List of VPC IPs or IP ranges inside the VPC subnet.","description_kind":"plain","optional":true},"ipam_address":{"type":"string","description":"This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces.","description_kind":"plain","optional":true},"primary":{"type":"bool","description":"Whether the interface is the primary interface that should have the default route for this Linode.","description_kind":"plain","optional":true},"purpose":{"type":"string","description":"The type of interface.","description_kind":"plain","required":true},"subnet_id":{"type":"number","description":"The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces.","description_kind":"plain","optional":true},"vpc_id":{"type":"number","description":"The ID of VPC of the subnet which the VPC interface is connected to.","description_kind":"plain","computed":true}},"block_types":{"ipv4":{"nesting_mode":"list","block":{"attributes":{"nat_1_1":{"type":"string","description":"The public IP that will be used for the one-to-one NAT purpose.","description_kind":"plain","optional":true,"computed":true},"vpc":{"type":"string","description":"The IP from the VPC subnet to use for this interface.","description_kind":"plain","optional":true,"computed":true}},"description":"The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces.","description_kind":"plain"},"max_items":1}},"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"}},"metadata":{"nesting_mode":"list","block":{"attributes":{"user_data":{"type":"string","description":"The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information on encoding content for this field.","description_kind":"plain","optional":true}},"description":"Various fields related to the Linode Metadata service.","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":{"device":{"nesting_mode":"set","block":{"attributes":{"device_name":{"type":"string","description":"The Disk ID to map to this disk slot","description_kind":"plain","required":true},"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":"Blocks for device disks in a Linode's configuration profile.","description_kind":"plain"}},"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","deprecated":true},"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":{"active":{"type":"bool","description":"Whether this interface is currently booted and active.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The ID of the interface.","description_kind":"plain","computed":true},"ip_ranges":{"type":["list","string"],"description":"List of VPC IPs or IP ranges inside the VPC subnet.","description_kind":"plain","optional":true},"ipam_address":{"type":"string","description":"This Network Interface's private IP address in Classless Inter-Domain Routing (CIDR) notation.This attribute is only allowed for VLAN interfaces.","description_kind":"plain","optional":true},"label":{"type":"string","description":"The name of the VALN. This attribute is required for VLAN interfaces. This attribute is only allowed for VLAN interfaces.","description_kind":"plain","optional":true},"primary":{"type":"bool","description":"Whether the interface is the primary interface that should have the default route for this Linode.","description_kind":"plain","optional":true},"purpose":{"type":"string","description":"The type of interface.","description_kind":"plain","required":true},"subnet_id":{"type":"number","description":"The ID of the subnet which the VPC interface is connected to.This attribute is required for VPC interfaces.This attribute is only allowed for VPC interfaces.","description_kind":"plain","optional":true},"vpc_id":{"type":"number","description":"The ID of VPC of the subnet which the VPC interface is connected to.","description_kind":"plain","computed":true}},"block_types":{"ipv4":{"nesting_mode":"list","block":{"attributes":{"nat_1_1":{"type":"string","description":"The public IP that will be used for the one-to-one NAT purpose.","description_kind":"plain","optional":true,"computed":true},"vpc":{"type":"string","description":"The IP from the VPC subnet to use for this interface.","description_kind":"plain","optional":true,"computed":true}},"description":"The IPv4 configuration of the VPC interface.This attribute is only allowed for VPC interfaces.","description_kind":"plain"},"max_items":1}},"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. This functionality is not affected by the `skip_implicit_reboots` provider argument.","description_kind":"plain","optional":true,"computed":true},"gateway":{"type":"string","description":"The default gateway for this address","description_kind":"plain","computed":true},"id":{"type":"string","description":"The ID of the IPv4 address, which will be IPv4 address itself.","description_kind":"plain","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,"computed":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},"vpc_nat_1_1":{"type":["list",["object",{"address":"string","subnet_id":"number","vpc_id":"number"}]],"description":"Contains information about the NAT 1:1 mapping of a public IP address to a VPC subnet.","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":"linode_id is used as the ID of linode_instance_shared_ips","description_kind":"plain","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":"The unique ID for this Resource.","description_kind":"plain","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,"computed":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","optional":true,"computed":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,"computed":true},"created":{"type":"string","description":"When this NodeBalancer was created.","description_kind":"plain","computed":true},"firewall_id":{"type":"number","description":"ID for the firewall you'd like to use with this NodeBalancer.","description_kind":"plain","optional":true},"firewalls":{"type":["list",["object",{"created":"string","id":"number","inbound":["list",["object",{"action":"string","ipv4":["list","string"],"ipv6":["list","string"],"label":"string","ports":"string","protocol":"string"}]],"inbound_policy":"string","label":"string","outbound":["list",["object",{"action":"string","ipv4":["list","string"],"ipv6":["list","string"],"label":"string","ports":"string","protocol":"string"}]],"outbound_policy":"string","status":"string","tags":["set","string"],"updated":"string"}]],"description":"A list of Firewalls assigned to this NodeBalancer.","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":"The unique ID of the Linode NodeBalancer.","description_kind":"plain","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","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,"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","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},"endpoint":{"type":"string","description":"The endpoint for the bucket used for s3 connections.","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_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":"The unique ID of this Object Storage key.","description_kind":"plain","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":"set","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},"endpoint":{"type":"string","description":"The endpoint for the bucket used for s3 connections.","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":"Unique identification field for this RDNS Resource. The public Linode IPv4 or IPv6 address to operate on. ","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","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,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).","description_kind":"plain","optional":true},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).","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":"The unique identifier for this SSH key.","description_kind":"plain","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":"The StackScript's unique ID.","description_kind":"plain","computed":true},"images":{"type":["set","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,"computed":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,"computed":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","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:05Z","description_kind":"plain","optional":true,"computed":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":"The id of the volume.","description_kind":"plain","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,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).","description_kind":"plain","optional":true},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.","description_kind":"plain","optional":true},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_vpc":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date and time when the VPC was created.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The user-defined description of this VPC.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The id of the VPC.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of the VPC. Only contains ascii letters, digits and dashes","description_kind":"plain","required":true},"region":{"type":"string","description":"The region of the VPC.","description_kind":"plain","required":true},"updated":{"type":"string","description":"The date and time when the VPC was updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_vpc_subnet":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date and time when the VPC Subnet was created.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The id of the VPC Subnet.","description_kind":"plain","computed":true},"ipv4":{"type":"string","description":"The IPv4 range of this subnet in CIDR format.","description_kind":"plain","required":true},"label":{"type":"string","description":"The label of the VPC subnet.","description_kind":"plain","required":true},"linodes":{"type":["list",["object",{"id":"number","interfaces":["list",["object",{"active":"bool","id":"number"}]]}]],"description_kind":"plain","computed":true},"updated":{"type":"string","description":"The date and time when the VPC Subnet was updated.","description_kind":"plain","computed":true},"vpc_id":{"type":"number","description":"The id of the parent VPC for this VPC Subnet","description_kind":"plain","required":true}},"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":"The Email of the Account.","description_kind":"plain","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_availabilities":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","description_kind":"plain","computed":true}},"block_types":{"availabilities":{"nesting_mode":"list","block":{"attributes":{"region":{"type":"string","description":"The region of this availability entry.","description_kind":"plain","required":true},"unavailable":{"type":["set","string"],"description":"A set of unavailable services for the current account in this region.","description_kind":"plain","computed":true}},"description":"The returned list of account availabilities.","description_kind":"plain"}},"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_account_availability":{"version":0,"block":{"attributes":{"region":{"type":"string","description":"The region of this availability entry.","description_kind":"plain","required":true},"unavailable":{"type":["set","string"],"description":"A set of unavailable services for the current account in this region.","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":"True 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":"The data source's unique ID.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"logins":{"nesting_mode":"list","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":"True 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":"The returned list of account logins.","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":"The email of the current account.","description_kind":"plain","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":{"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":"number","description":"The data source's unique ID.","description_kind":"plain","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":{"backups":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"A time value given in a combined date and time format that represents when the database backup was created.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The ID of the database backup object.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The database backup’s label, for display purposes only.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The type of database backup, determined by how the backup was created.","description_kind":"plain","computed":true}},"description":"The returned list of backups.","description_kind":"plain"}},"filter":{"nesting_mode":"set","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":["set","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":{"id":{"type":"string","description":"The data source's unique ID.","description_kind":"plain","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":{"engines":{"nesting_mode":"list","block":{"attributes":{"engine":{"type":"string","description":"The Managed Database engine type.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The Managed Database engine ID in engine/version format.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The Managed Database engine version.","description_kind":"plain","computed":true}},"description":"The returned list of engines.","description_kind":"plain"}},"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"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. DEPRECATED: Use ID instead","description_kind":"plain","deprecated":true,"optional":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.30)","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":"number","description":"Unique identifier for this DataSource. The ID of the MySQL database.","description_kind":"plain","optional":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 PostgreSQL database. DEPRECATED: Use ID instead","description_kind":"plain","deprecated":true,"optional":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":"number","description":"Unique identifier for this DataSource. The ID of the PostgreSQL database.","description_kind":"plain","optional":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":{"id":{"type":"string","description":"The data source's unique ID.","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":{"databases":{"nesting_mode":"list","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},"cluster_size":{"type":"number","description":"The number of Linode Instance nodes deployed to the Managed Database.","description_kind":"plain","computed":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","computed":true},"engine":{"type":"string","description":"The Managed Database engine type.","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/private host for the Managed Database.","description_kind":"plain","computed":true},"id":{"type":"number","description":"A unique ID that can be used to identify and reference the Managed Database.","description_kind":"plain","computed":true},"instance_uri":{"type":"string","description":"he API route for the database instance.","description_kind":"plain","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 ID 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},"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},"version":{"type":"string","description":"The Managed Database engine version.","description_kind":"plain","computed":true}},"description":"The returned list of databases.","description_kind":"plain"}},"filter":{"nesting_mode":"set","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":["set","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 our system; you cannot have two Domains 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 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","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":"number","description":"The Domain's unique ID.","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 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","computed":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","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 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","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":"The unique ID for this DataSource","description_kind":"plain","computed":true},"zone_file":{"type":["list","string"],"description":"Lines of the zone file for the last rendered zone for this domain.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_domains":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":{"domains":{"nesting_mode":"list","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 our system; you cannot have two Domains 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 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","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":"number","description":"The Domain's unique ID.","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 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","computed":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","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 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","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":"The returned list of Domains.","description_kind":"plain"}},"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_firewall":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"When this Firewall was created.","description_kind":"plain","computed":true},"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 assigned to this Firewall.","description_kind":"plain","computed":true},"nodebalancers":{"type":["set","number"],"description":"The IDs of NodeBalancers assigned to this Firewall.","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},"updated":{"type":"string","description":"When this Firewall was last updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_firewalls":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"firewalls":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"When this Firewall was created.","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","computed":true},"inbound_policy":{"type":"string","description":"The default behavior for inbound traffic.","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 assigned to this Firewall.","description_kind":"plain","computed":true},"nodebalancers":{"type":["set","number"],"description":"The IDs of NodeBalancers assigned to this Firewall..","description_kind":"plain","computed":true},"outbound_policy":{"type":"string","description":"The default behavior for outbound traffic.","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},"updated":{"type":"string","description":"When this Firewall was last updated.","description_kind":"plain","computed":true}},"block_types":{"devices":{"nesting_mode":"list","block":{"attributes":{"entity_id":{"type":"number","description":"The ID of the underlying entity this device references (i.e. the Linode's ID).","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID of the Firewall Device.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of the underlying entity this device references.","description_kind":"plain","computed":true},"type":{"type":"string","description":"The type of Firewall Device.","description_kind":"plain","computed":true},"url":{"type":"string","description":"The URL of the underlying entity this device references.","description_kind":"plain","computed":true}},"description":"The devices associated with this firewall.","description_kind":"plain"}},"inbound":{"nesting_mode":"list","block":{"attributes":{"action":{"type":"string","description":"Controls whether traffic is accepted or dropped by this rule (ACCEPT, DROP).","description_kind":"plain","computed":true},"ipv4":{"type":["set","string"],"description":"A list of IPv4 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"ipv6":{"type":["set","string"],"description":"A list of IPv6 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of this rule for display purposes only.","description_kind":"plain","computed":true},"ports":{"type":"string","description":"A string representation of ports and/or port ranges (i.e. \"443\" or \"80-90, 91\").","description_kind":"plain","computed":true},"protocol":{"type":"string","description":"The network protocol this rule controls. (TCP, UDP, ICMP)","description_kind":"plain","computed":true}},"description":"A set of firewall rules that specify 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 (ACCEPT, DROP).","description_kind":"plain","computed":true},"ipv4":{"type":["set","string"],"description":"A list of IPv4 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"ipv6":{"type":["set","string"],"description":"A list of IPv6 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of this rule for display purposes only.","description_kind":"plain","computed":true},"ports":{"type":"string","description":"A string representation of ports and/or port ranges (i.e. \"443\" or \"80-90, 91\").","description_kind":"plain","computed":true},"protocol":{"type":"string","description":"The network protocol this rule controls. (TCP, UDP, ICMP)","description_kind":"plain","computed":true}},"description":"A set of firewall rules that specify what outbound network traffic is allowed.","description_kind":"plain"}}},"description":"The returned list of Firewalls.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_image":{"version":0,"block":{"attributes":{"capabilities":{"type":["set","string"],"description":"The capabilities of this Image.","description_kind":"plain","computed":true},"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":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"images":{"nesting_mode":"list","block":{"attributes":{"capabilities":{"type":["set","string"],"description":"The capabilities of this Image.","description_kind":"plain","computed":true},"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":"The returned list of Images.","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":"number","description":"The ID of the Backup","description_kind":"plain","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":"Unique identifier for this DataSource.","description_kind":"plain","computed":true},"ipv4":{"type":["list",["object",{"private":["list",["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","rdns":"string","region":"string","subnet_mask":"string","type":"string","vpc_nat_1_1":["object",{"address":"string","subnet_id":"number","vpc_id":"number"}]}]],"public":["list",["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","rdns":"string","region":"string","subnet_mask":"string","type":"string","vpc_nat_1_1":["object",{"address":"string","subnet_id":"number","vpc_id":"number"}]}]],"reserved":["list",["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","rdns":"string","region":"string","subnet_mask":"string","type":"string","vpc_nat_1_1":["object",{"address":"string","subnet_id":"number","vpc_id":"number"}]}]],"shared":["list",["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","rdns":"string","region":"string","subnet_mask":"string","type":"string","vpc_nat_1_1":["object",{"address":"string","subnet_id":"number","vpc_id":"number"}]}]]}]],"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":["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","rdns":"string","region":"string","subnet_mask":"string","type":"string","vpc_nat_1_1":["object",{"address":"string","subnet_id":"number","vpc_id":"number"}]}],"slaac":["object",{"address":"string","gateway":"string","linode_id":"number","prefix":"number","public":"bool","rdns":"string","region":"string","subnet_mask":"string","type":"string","vpc_nat_1_1":["object",{"address":"string","subnet_id":"number","vpc_id":"number"}]}]}]],"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"}]],"region_prices":["list",["object",{"hourly":"number","id":"string","monthly":"number"}]]}]]}]],"description":"Information about the optional Backup service offered for Linodes.","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},"region_prices":{"type":["list",["object",{"hourly":"number","id":"string","monthly":"number"}]],"description":"A list of region-specific prices for this plan.","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":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"types":{"nesting_mode":"list","block":{"attributes":{"addons":{"type":["list",["object",{"backups":["list",["object",{"price":["list",["object",{"hourly":"number","monthly":"number"}]],"region_prices":["list",["object",{"hourly":"number","id":"string","monthly":"number"}]]}]]}]],"description":"Information about the optional Backup service offered for Linodes.","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},"region_prices":{"type":["list",["object",{"hourly":"number","id":"string","monthly":"number"}]],"description":"A list of region-specific prices for this plan.","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":"The returned list of instance types.","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"}]],"id":"number","interface":["list",["object",{"active":"bool","id":"number","ip_ranges":["list","string"],"ipam_address":"string","ipv4":["list",["object",{"nat_1_1":"string","vpc":"string"}]],"label":"string","primary":"bool","purpose":"string","subnet_id":"number","vpc_id":"number"}]],"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","has_user_data":"bool","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":"The unique ID for this DataSource","description_kind":"plain","computed":true},"is_bgp":{"type":"bool","description":"Whether this IPv6 range is shared.","description_kind":"plain","computed":true},"linodes":{"type":["set","number"],"description":"The IDs of Linodes to apply this firewall to.","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_ipv6_ranges":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"ranges":{"nesting_mode":"list","block":{"attributes":{"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 address of this range.","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.","description_kind":"plain","computed":true}},"description":"The return list of IPv6 ranges.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_kernel":{"version":0,"block":{"attributes":{"architecture":{"type":"string","description":"The architecture of this Kernel.","description_kind":"plain","computed":true},"built":{"type":"string","description":"The date on which this Kernel was built.","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_kernels":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"kernels":{"nesting_mode":"list","block":{"attributes":{"architecture":{"type":"string","description":"The architecture of this Kernel.","description_kind":"plain","computed":true},"built":{"type":"string","description":"The date on which this Kernel was built.","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":"The returned list of Kernels.","description_kind":"plain"}}},"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},"created":{"type":"string","description":"When this Kubernetes cluster was created.","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},"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},"updated":{"type":"string","description":"When this Kubernetes cluster was updated.","description_kind":"plain","computed":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","computed":true}},"description":"Defines settings for the Kubernetes Control Plane.","description_kind":"plain"}},"pools":{"nesting_mode":"list","block":{"attributes":{"count":{"type":"number","description":"The number of nodes in the Node Pool.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The ID of the Node Pool.","description_kind":"plain","computed":true},"tags":{"type":["list","string"],"description":"An array of tags applied to this object. Tags are for organizational purposes only.","description_kind":"plain","computed":true},"type":{"type":"string","description":"A Linode Type for all of the nodes in the Node Pool.","description_kind":"plain","computed":true}},"block_types":{"autoscaler":{"nesting_mode":"list","block":{"attributes":{"enabled":{"type":"bool","description":"Whether autoscaling is enabled for this Node Pool. Defaults to false.","description_kind":"plain","computed":true},"max":{"type":"number","description":"The maximum number of nodes to autoscale to. Defaults to the Node Pool’s count.","description_kind":"plain","computed":true},"min":{"type":"number","description":"The minimum number of nodes to autoscale to. Defaults to the Node Pool’s count.","description_kind":"plain","computed":true}},"description":"When specified, the number of nodes autoscales within the defined minimum and maximum values.","description_kind":"plain"}},"disks":{"nesting_mode":"list","block":{"attributes":{"size":{"type":"number","description":"The size of this custom disk partition in MB.","description_kind":"plain","computed":true},"type":{"type":"string","description":"This custom disk partition’s filesystem type.","description_kind":"plain","computed":true}},"description":"This Node Pool’s custom disk layout.","description_kind":"plain"}},"nodes":{"nesting_mode":"list","block":{"attributes":{"id":{"type":"string","description":"The ID of the node.","description_kind":"plain","computed":true},"instance_id":{"type":"number","description":"The ID of the underlying Linode instance.","description_kind":"plain","computed":true},"status":{"type":"string","description":"The status of the node.","description_kind":"plain","computed":true}},"description":"The nodes in the node pool.","description_kind":"plain"}}},"description":"All active Node Pools on the cluster.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_lke_clusters":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"lke_clusters":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"When this Kubernetes cluster was created.","description_kind":"plain","computed":true},"id":{"type":"number","description":"This Kubernetes cluster’s unique ID.","description_kind":"plain","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","computed":true},"label":{"type":"string","description":"The unique label for 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},"updated":{"type":"string","description":"When this Kubernetes cluster was updated.","description_kind":"plain","computed":true}},"block_types":{"control_plane":{"nesting_mode":"single","block":{"attributes":{"high_availability":{"type":"bool","description":"Defines whether High Availability is enabled for the Control Plane Components of the cluster.","description_kind":"plain","computed":true}},"description":"Defines settings for the Kubernetes Control Plane.","description_kind":"plain"}}},"description":"The returned list of LKE clusters available on the account.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_lke_versions":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"Unique identification field for this list of LKE Versions.","description_kind":"plain","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":"A unique identifier for this datasource.","description_kind":"plain","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}},"block_types":{"firewalls":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"When this Firewall was created.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The unique ID assigned to this Firewall.","description_kind":"plain","computed":true},"inbound_policy":{"type":"string","description":"The default behavior for inbound traffic.","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},"outbound_policy":{"type":"string","description":"The default behavior for outbound traffic.","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},"updated":{"type":"string","description":"When this Firewall was last updated.","description_kind":"plain","computed":true}},"block_types":{"inbound":{"nesting_mode":"list","block":{"attributes":{"action":{"type":"string","description":"Controls whether traffic is accepted or dropped by this rule (ACCEPT, DROP).","description_kind":"plain","computed":true},"ipv4":{"type":["set","string"],"description":"A list of IPv4 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"ipv6":{"type":["set","string"],"description":"A list of IPv6 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of this rule for display purposes only.","description_kind":"plain","computed":true},"ports":{"type":"string","description":"A string representation of ports and/or port ranges (i.e. \"443\" or \"80-90, 91\").","description_kind":"plain","computed":true},"protocol":{"type":"string","description":"The network protocol this rule controls. (TCP, UDP, ICMP)","description_kind":"plain","computed":true}},"description":"A set of firewall rules that specify 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 (ACCEPT, DROP).","description_kind":"plain","computed":true},"ipv4":{"type":["set","string"],"description":"A list of IPv4 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"ipv6":{"type":["set","string"],"description":"A list of IPv6 addresses or networks in IP/mask format.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of this rule for display purposes only.","description_kind":"plain","computed":true},"ports":{"type":"string","description":"A string representation of ports and/or port ranges (i.e. \"443\" or \"80-90, 91\").","description_kind":"plain","computed":true},"protocol":{"type":"string","description":"The network protocol this rule controls. (TCP, UDP, ICMP)","description_kind":"plain","computed":true}},"description":"A set of firewall rules that specify what outbound network traffic is allowed.","description_kind":"plain"}}},"description":"A list of Firewalls assigned to this NodeBalancer.","description_kind":"plain"}}},"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_configs":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","description_kind":"plain","computed":true},"nodebalancer_id":{"type":"number","description":"The ID of the NodeBalancer to access.","description_kind":"plain","required":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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"nodebalancer_configs":{"nesting_mode":"list","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":"The returned list of NodeBalancer Configs.","description_kind":"plain"}}},"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_nodebalancers":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"nodebalancers":{"nesting_mode":"list","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":"The returned list of NodeBalancers.","description_kind":"plain"}}},"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","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","computed":true},"static_site_domain":{"type":"string","description":"The base URL for this cluster used when hosting static sites.","description_kind":"plain","computed":true},"status":{"type":"string","description":"This cluster's status.","description_kind":"plain","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":"Unique identification field for this datasource.","description_kind":"plain","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":["set","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","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},"status":{"type":"string","description":"This region’s current operational status.","description_kind":"plain","computed":true}},"block_types":{"resolvers":{"nesting_mode":"list","block":{"attributes":{"ipv4":{"type":"string","description":"The IPv4 addresses for this region’s DNS resolvers, separated by commas.","description_kind":"plain","computed":true},"ipv6":{"type":"string","description":"The IPv6 addresses for this region’s DNS resolvers, separated by commas.","description_kind":"plain","computed":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"linode_regions":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"regions":{"nesting_mode":"list","block":{"attributes":{"capabilities":{"type":["set","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","computed":true},"id":{"type":"string","description":"The unique ID of this Region.","description_kind":"plain","computed":true},"label":{"type":"string","description":"Detailed location information for this Region, including city, state or region, and country.","description_kind":"plain","computed":true},"status":{"type":"string","description":"This region’s current operational status.","description_kind":"plain","computed":true}},"block_types":{"resolvers":{"nesting_mode":"list","block":{"attributes":{"ipv4":{"type":"string","description":"The IPv4 addresses for this region’s DNS resolvers, separated by commas.","description_kind":"plain","computed":true},"ipv6":{"type":"string","description":"The IPv6 addresses for this region’s DNS resolvers, separated by commas.","description_kind":"plain","computed":true}},"description_kind":"plain"}}},"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":"A unique identifier for this datasource.","description_kind":"plain","optional":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_sshkeys":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"sshkeys":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"The date this key was added.","description_kind":"plain","computed":true},"id":{"type":"string","description":"A unique identifier for this datasource.","description_kind":"plain","optional":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":"The returned list of SSH Keys.","description_kind":"plain"}}},"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":"string","description":"The StackScript's unique ID.","description_kind":"plain","required":true},"images":{"type":["set","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","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":"The data source's unique ID.","description_kind":"plain","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}},"block_types":{"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"stackscripts":{"nesting_mode":"list","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":"string","description":"The StackScript's unique ID.","description_kind":"plain","required":true},"images":{"type":["set","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","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":"The returned list of StackScripts.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_user":{"version":0,"block":{"attributes":{"database_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"domain_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"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},"firewall_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"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":"Unique identifier for this DataSource.","description_kind":"plain","computed":true},"image_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"linode_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"longview_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"nodebalancer_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"password_created":{"type":"string","description":"The date and time when this User’s current password was created.User passwords are first created during the Account sign-up process, and updated using the Reset Password webpage.null if this User has not created a password yet.","description_kind":"plain","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},"stackscript_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"tfa_enabled":{"type":"bool","description":"A boolean value indicating if the User has Two Factor Authentication (TFA) enabled.","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},"verified_phone_number":{"type":"string","description":"The phone number verified for this User Profile with the Phone Number Verify command.null if this User Profile has no verified phone number.","description_kind":"plain","computed":true},"volume_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"linode_users":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"users":{"nesting_mode":"list","block":{"attributes":{"database_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"domain_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"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},"firewall_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"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":"Unique identifier for this DataSource.","description_kind":"plain","computed":true},"image_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"linode_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"longview_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"nodebalancer_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"password_created":{"type":"string","description":"The date and time when this User’s current password was created.User passwords are first created during the Account sign-up process, and updated using the Reset Password webpage.null if this User has not created a password yet.","description_kind":"plain","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},"stackscript_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true},"tfa_enabled":{"type":"bool","description":"A boolean value indicating if the User has Two Factor Authentication (TFA) enabled.","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},"verified_phone_number":{"type":"string","description":"The phone number verified for this User Profile with the Phone Number Verify command.null if this User Profile has no verified phone number.","description_kind":"plain","computed":true},"volume_grant":{"type":["set",["object",{"id":"number","label":"string","permissions":"string"}]],"description":"A set containing all of the user's active grants.","description_kind":"plain","optional":true,"computed":true}},"description":"The returned list of Users.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_vlans":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"vlans":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"When this VLAN was created.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The unique label of this VLAN.","description_kind":"plain","computed":true},"linodes":{"type":["set","number"],"description":"The Linodes currently attached to this VLAN.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region this VLAN is located in.","description_kind":"plain","computed":true}},"description":"The returned list of VLANs.","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"}},"linode_volumes":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","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":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"volumes":{"nesting_mode":"list","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":"The return list of Volumes.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_vpc":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date and time when the VPC was created.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The user-defined description of this VPC.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The id of the VPC.","description_kind":"plain","required":true},"label":{"type":"string","description":"The label of the VPC.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region of the VPC.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"The date and time when the VPC was updated.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"linode_vpc_subnet":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date and time when the VPC Subnet was created.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The id of the VPC Subnet.","description_kind":"plain","required":true},"ipv4":{"type":"string","description":"The IPv4 range of this subnet in CIDR format.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of the VPC Subnet.","description_kind":"plain","computed":true},"linodes":{"type":["list",["object",{"id":"number","interfaces":["list",["object",{"active":"bool","id":"number"}]]}]],"description_kind":"plain","computed":true},"updated":{"type":"string","description":"The date and time when the VPC Subnet was updated.","description_kind":"plain","computed":true},"vpc_id":{"type":"number","description":"The id of the parent VPC for this VPC Subnet","description_kind":"plain","required":true}},"description_kind":"plain"}},"linode_vpc_subnets":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","description_kind":"plain","computed":true},"vpc_id":{"type":"number","description":"The id of the parent VPC for the list of VPC subnets","description_kind":"plain","required":true}},"block_types":{"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"vpc_subnets":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"The date and time when the VPC Subnet was created.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The id of the VPC Subnet.","description_kind":"plain","computed":true},"ipv4":{"type":"string","description":"The IPv4 range of this subnet in CIDR format.","description_kind":"plain","computed":true},"label":{"type":"string","description":"The label of the VPC Subnet.","description_kind":"plain","computed":true},"linodes":{"type":["list",["object",{"id":"number","interfaces":["list",["object",{"active":"bool","id":"number"}]]}]],"description_kind":"plain","computed":true},"updated":{"type":"string","description":"The date and time when the VPC Subnet was updated.","description_kind":"plain","computed":true}},"description":"The returned list of subnets under a VPC.","description_kind":"plain"}}},"description_kind":"plain"}},"linode_vpcs":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The data source's unique ID.","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"set","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":["set","string"],"description":"The value(s) to be used in the filter.","description_kind":"plain","required":true}},"description_kind":"plain"}},"vpcs":{"nesting_mode":"list","block":{"attributes":{"created":{"type":"string","description":"The date and time when the VPC was created.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The user-defined description of this VPC.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The id of the VPC.","description_kind":"plain","required":true},"label":{"type":"string","description":"The label of the VPC.","description_kind":"plain","computed":true},"region":{"type":"string","description":"The region of the VPC.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"The date and time when the VPC was updated.","description_kind":"plain","computed":true}},"description":"The returned list of VPCs.","description_kind":"plain"}}},"description_kind":"plain"}}}}}} diff --git a/config/vpc/config.go b/config/vpc/config.go new file mode 100644 index 0000000..c0c2bcd --- /dev/null +++ b/config/vpc/config.go @@ -0,0 +1,12 @@ +package vpc + +import "github.com/crossplane/upjet/pkg/config" + +// Configure configures individual resources by adding custom ResourceConfigurators. +func Configure(p *config.Provider) { + p.AddResourceConfigurator("linode_vpc", func(r *config.Resource) { + // We need to override the default group that upjet generated for + // this resource, which would be "linode" + r.ShortGroup = "vpc" + }) +} diff --git a/config/vpcsubnet/config.go b/config/vpcsubnet/config.go new file mode 100644 index 0000000..53dfc56 --- /dev/null +++ b/config/vpcsubnet/config.go @@ -0,0 +1,12 @@ +package vpcsubnet + +import "github.com/crossplane/upjet/pkg/config" + +// Configure configures individual resources by adding custom ResourceConfigurators. +func Configure(p *config.Provider) { + p.AddResourceConfigurator("linode_vpc_subnet", func(r *config.Resource) { + r.References["vpc_id"] = config.Reference{ + Type: "github.com/linode/provider-linode/apis/vpc/v1alpha1.VPC", + } + }) +} diff --git a/docs/developer.md b/docs/developer.md index e6c8bc9..ac34f58 100644 --- a/docs/developer.md +++ b/docs/developer.md @@ -1,13 +1,14 @@ ## Developing -Run code-generation pipeline: +Run code-generation pipeline - you need to do this everytime you change the linode-terraform-provider version, to update CRDs ```console -go run cmd/generator/main.go "$PWD" +make generate ``` Run against a Kubernetes cluster: ```console +export KUBECONFIG= make run ``` @@ -22,3 +23,17 @@ Build binary: ```console make build ``` + +Add a new resource: + +1. Find out if the resource is implemented using the `frameworkprovider` or the terraform v2 provider in the linode-terraform-provider - newer resources are usually frameworkprovider based +2. Add the name of the provider to the appropriate list in `config/externalname.go` +3. Create a directory for the resource group in config/ +4. Add a file `resourcename.go` implementing the `Configure` method (see config/vpc/vpc.go for an example) +5. Add the configure method to the loop at `config/provider.go:GetProvider()` method +6. Run `make generate`, `make local-deploy` - create a manifest for your resource and test that it works. + + +Debugging using dlv: +1. use `make run` to run the provider locally +2. `dlv attach ` to begin a debug session diff --git a/examples-generated/database/v1alpha1/accesscontrols.yaml b/examples-generated/database/v1alpha1/accesscontrols.yaml index d60842c..ffbeb52 100644 --- a/examples-generated/database/v1alpha1/accesscontrols.yaml +++ b/examples-generated/database/v1alpha1/accesscontrols.yaml @@ -42,7 +42,7 @@ metadata: name: my-instance spec: forProvider: - image: linode/alpine3.14 + image: linode/alpine3.19 label: myinstance region: us-southeast type: g6-nanode-1 diff --git a/examples-generated/firewall/v1alpha1/firewall.yaml b/examples-generated/firewall/v1alpha1/firewall.yaml index bff81af..21d8314 100644 --- a/examples-generated/firewall/v1alpha1/firewall.yaml +++ b/examples-generated/firewall/v1alpha1/firewall.yaml @@ -60,7 +60,7 @@ metadata: name: my-instance spec: forProvider: - image: linode/ubuntu18.04 + image: linode/ubuntu22.04 label: my_instance region: us-southeast rootPassSecretRef: diff --git a/examples-generated/instance/v1alpha1/config.yaml b/examples-generated/instance/v1alpha1/config.yaml index 6c8468c..0973041 100644 --- a/examples-generated/instance/v1alpha1/config.yaml +++ b/examples-generated/instance/v1alpha1/config.yaml @@ -9,11 +9,9 @@ metadata: spec: forProvider: booted: true - devices: - - sda: - - diskIdSelector: - matchLabels: - testing.upbound.io/example-name: boot + device: + - deviceName: sda + diskId: ${linode_instance_disk.boot.id} label: my-config linodeIdSelector: matchLabels: @@ -47,7 +45,7 @@ metadata: name: boot spec: forProvider: - image: linode/ubuntu20.04 + image: linode/ubuntu22.04 label: boot linodeIdSelector: matchLabels: diff --git a/examples-generated/instance/v1alpha1/instance.yaml b/examples-generated/instance/v1alpha1/instance.yaml index 5be3e80..2c8ac32 100644 --- a/examples-generated/instance/v1alpha1/instance.yaml +++ b/examples-generated/instance/v1alpha1/instance.yaml @@ -10,8 +10,7 @@ spec: forProvider: authorizedKeys: - ssh-rsa AAAA...Gw== user@example.local - group: foo - image: linode/ubuntu18.04 + image: linode/ubuntu22.04 label: simple_instance privateIp: true region: us-central diff --git a/examples-generated/instance/v1alpha1/ip.yaml b/examples-generated/instance/v1alpha1/ip.yaml index a1ee9aa..998f6e0 100644 --- a/examples-generated/instance/v1alpha1/ip.yaml +++ b/examples-generated/instance/v1alpha1/ip.yaml @@ -25,7 +25,7 @@ metadata: name: foo spec: forProvider: - image: linode/alpine3.16 + image: linode/alpine3.19 label: foobar-test region: us-east type: g6-nanode-1 diff --git a/examples-generated/ipv6/v1alpha1/ipv6range.yaml b/examples-generated/ipv6/v1alpha1/ipv6range.yaml index 29302dd..1ef84cb 100644 --- a/examples-generated/ipv6/v1alpha1/ipv6range.yaml +++ b/examples-generated/ipv6/v1alpha1/ipv6range.yaml @@ -25,7 +25,7 @@ metadata: name: foobar spec: forProvider: - image: linode/alpine3.14 + image: linode/alpine3.19 label: my-linode region: us-southeast type: g6-nanode-1 diff --git a/examples-generated/lke/v1alpha1/cluster.yaml b/examples-generated/lke/v1alpha1/cluster.yaml index e0bbc02..12354fd 100644 --- a/examples-generated/lke/v1alpha1/cluster.yaml +++ b/examples-generated/lke/v1alpha1/cluster.yaml @@ -8,7 +8,7 @@ metadata: name: my-cluster spec: forProvider: - k8sVersion: "1.21" + k8sVersion: "1.28" label: my-cluster pool: - count: 3 diff --git a/examples-generated/nodebalancer/v1alpha1/node.yaml b/examples-generated/nodebalancer/v1alpha1/node.yaml index 3941b02..eb33b9c 100644 --- a/examples-generated/nodebalancer/v1alpha1/node.yaml +++ b/examples-generated/nodebalancer/v1alpha1/node.yaml @@ -34,7 +34,7 @@ spec: authorizedKeys: - ssh-rsa AAAA...Gw== user@example.local count: "3" - image: linode/ubuntu18.04 + image: linode/ubuntu22.04 label: web-${count.index + 1} privateIp: true region: us-east diff --git a/examples-generated/rdns/v1alpha1/rdns.yaml b/examples-generated/rdns/v1alpha1/rdns.yaml index 8451a8b..155dfc0 100644 --- a/examples-generated/rdns/v1alpha1/rdns.yaml +++ b/examples-generated/rdns/v1alpha1/rdns.yaml @@ -23,6 +23,6 @@ metadata: name: foo spec: forProvider: - image: linode/alpine3.9 + image: linode/alpine3.19 region: ca-east type: g6-dedicated-2 diff --git a/examples-generated/sshkey/v1alpha1/sshkey.yaml b/examples-generated/sshkey/v1alpha1/sshkey.yaml index a302301..6a3bef5 100644 --- a/examples-generated/sshkey/v1alpha1/sshkey.yaml +++ b/examples-generated/sshkey/v1alpha1/sshkey.yaml @@ -25,7 +25,7 @@ spec: forProvider: authorizedKeys: - ${linode_sshkey.foo.ssh_key} - image: linode/ubuntu18.04 + image: linode/ubuntu22.04 label: foo region: us-east rootPassSecretRef: diff --git a/examples-generated/stackscript/v1alpha1/stackscript.yaml b/examples-generated/stackscript/v1alpha1/stackscript.yaml index 7343cd2..3512a3a 100644 --- a/examples-generated/stackscript/v1alpha1/stackscript.yaml +++ b/examples-generated/stackscript/v1alpha1/stackscript.yaml @@ -10,8 +10,8 @@ spec: forProvider: description: Installs a Package images: - - linode/ubuntu18.04 - - linode/ubuntu16.04lts + - linode/ubuntu22.04 + - linode/ubuntu20.04 label: foo revNote: initial version script: | @@ -33,7 +33,7 @@ spec: forProvider: authorizedKeys: - '...' - image: linode/ubuntu18.04 + image: linode/ubuntu22.04 label: foo region: us-east rootPassSecretRef: diff --git a/examples-generated/vpc/v1alpha1/subnet.yaml b/examples-generated/vpc/v1alpha1/subnet.yaml new file mode 100644 index 0000000..0b07947 --- /dev/null +++ b/examples-generated/vpc/v1alpha1/subnet.yaml @@ -0,0 +1,15 @@ +apiVersion: vpc.linode.upbound.io/v1alpha1 +kind: Subnet +metadata: + annotations: + meta.upbound.io/example-id: vpc/v1alpha1/subnet + labels: + testing.upbound.io/example-name: test + name: test +spec: + forProvider: + ipv4: 10.0.0.0/24 + label: test-subnet + vpcIdSelector: + matchLabels: + testing.upbound.io/example-name: example diff --git a/examples-generated/vpc/v1alpha1/vpc.yaml b/examples-generated/vpc/v1alpha1/vpc.yaml new file mode 100644 index 0000000..eaf1251 --- /dev/null +++ b/examples-generated/vpc/v1alpha1/vpc.yaml @@ -0,0 +1,13 @@ +apiVersion: vpc.linode.upbound.io/v1alpha1 +kind: VPC +metadata: + annotations: + meta.upbound.io/example-id: vpc/v1alpha1/vpc + labels: + testing.upbound.io/example-name: test + name: test +spec: + forProvider: + description: My first VPC. + label: test-vpc + region: us-iad diff --git a/go.mod b/go.mod index b7976c4..aa9e669 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/crossplane/upjet v1.1.0 github.com/hashicorp/terraform-json v0.21.0 github.com/hashicorp/terraform-plugin-sdk/v2 v2.32.0 - github.com/linode/terraform-provider-linode/v2 v2.14.0 + github.com/linode/terraform-provider-linode/v2 v2.16.0 github.com/pkg/errors v0.9.1 gopkg.in/alecthomas/kingpin.v2 v2.2.6 k8s.io/apimachinery v0.28.4 @@ -25,25 +25,25 @@ require ( github.com/antchfx/htmlquery v1.2.4 // indirect github.com/antchfx/xpath v1.2.0 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect - github.com/aws/aws-sdk-go-v2 v1.24.1 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 // indirect - github.com/aws/aws-sdk-go-v2/config v1.26.1 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.16.12 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10 // indirect - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.7 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.48.1 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.18.5 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.26.5 // indirect - github.com/aws/smithy-go v1.19.0 // indirect + github.com/aws/aws-sdk-go-v2 v1.25.2 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 // indirect + github.com/aws/aws-sdk-go-v2/config v1.27.1 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.1 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.0 // indirect + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.2 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.2 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.51.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.19.1 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.22.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.27.1 // indirect + github.com/aws/smithy-go v1.20.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/dave/jennifer v1.4.1 // indirect @@ -90,7 +90,7 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/linode/linodego v1.28.0 // indirect + github.com/linode/linodego v1.29.0 // indirect github.com/linode/linodego/k8s v1.25.2 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect @@ -153,5 +153,3 @@ require ( sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.4.0 // indirect ) - -replace github.com/linode/terraform-provider-linode/v2 v2.14.0 => github.com/tchinmai7/terraform-provider-linode/v2 v2.0.0-20240212213046-468f25b69508 diff --git a/go.sum b/go.sum index d2b9160..544ea4c 100644 --- a/go.sum +++ b/go.sum @@ -60,44 +60,44 @@ github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJE github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= -github.com/aws/aws-sdk-go-v2 v1.24.1 h1:xAojnj+ktS95YZlDf0zxWBkbFtymPeDP+rvUQIH3uAU= -github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 h1:OCs21ST2LrepDfD3lwlQiOqIGp6JiEUqG84GzTDoyJs= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4/go.mod h1:usURWEKSNNAcAZuzRn/9ZYPT8aZQkR7xcCtunK/LkJo= -github.com/aws/aws-sdk-go-v2/config v1.26.1 h1:z6DqMxclFGL3Zfo+4Q0rLnAZ6yVkzCRxhRMsiRQnD1o= -github.com/aws/aws-sdk-go-v2/config v1.26.1/go.mod h1:ZB+CuKHRbb5v5F0oJtGdhFTelmrxd4iWO1lf0rQwSAg= -github.com/aws/aws-sdk-go-v2/credentials v1.16.12 h1:v/WgB8NxprNvr5inKIiVVrXPuuTegM+K8nncFkr1usU= -github.com/aws/aws-sdk-go-v2/credentials v1.16.12/go.mod h1:X21k0FjEJe+/pauud82HYiQbEr9jRKY3kXEIQ4hXeTQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10 h1:w98BT5w+ao1/r5sUuiH6JkVzjowOKeOJRHERyy1vh58= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10/go.mod h1:K2WGI7vUvkIv1HoNbfBA1bvIZ+9kL3YVmWxeKuLQsiw= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.7 h1:FnLf60PtjXp8ZOzQfhJVsqF0OtYKQZWQfqOLshh8YXg= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.7/go.mod h1:tDVvl8hyU6E9B8TrnNrZQEVkQlB8hjJwcgpPhgtlnNg= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 h1:vF+Zgd9s+H4vOXd5BMaPWykta2a6Ih0AKLq/X6NYKn4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10/go.mod h1:6BkRjejp/GR4411UGqkX8+wFMbFbqsUIimfK4XjOKR4= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 h1:nYPe006ktcqUji8S2mqXf9c/7NdiKriOwMvWQHgYztw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10/go.mod h1:6UV4SZkVvmODfXKql4LCbaZUpF7HO2BX38FgBf9ZOLw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 h1:GrSw8s0Gs/5zZ0SX+gX4zQjRnRsMJDJ2sLur1gRBhEM= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10 h1:5oE2WzJE56/mVveuDZPJESKlg/00AaS2pY2QZcnxg4M= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10/go.mod h1:FHbKWQtRBYUz4vO5WBWjzMD2by126ny5y/1EoaWoLfI= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 h1:/b31bi3YVNlkzkBrm9LfpaKoaYZUxIAj4sHfOTmLfqw= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10 h1:L0ai8WICYHozIKK+OtPzVJBugL7culcuM4E4JOpIEm8= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10/go.mod h1:byqfyxJBshFk0fF9YmK0M0ugIO8OWjzH2T3bPG4eGuA= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 h1:DBYTXwIGQSGs9w4jKm60F5dmCQ3EEruxdc0MFh+3EY4= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10/go.mod h1:wohMUQiFdzo0NtxbBg0mSRGZ4vL3n0dKjLTINdcIino= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10 h1:KOxnQeWy5sXyS37fdKEvAsGHOr9fa/qvwxfJurR/BzE= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10/go.mod h1:jMx5INQFYFYB3lQD9W0D8Ohgq6Wnl7NYOJ2TQndbulI= -github.com/aws/aws-sdk-go-v2/service/s3 v1.48.1 h1:5XNlsBsEvBZBMO6p82y+sqpWg8j5aBCe+5C2GBFgqBQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.48.1/go.mod h1:4qXHrG1Ne3VGIMZPCB8OjH/pLFO94sKABIusjh0KWPU= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.5 h1:ldSFWz9tEHAwHNmjx2Cvy1MjP5/L9kNoR0skc6wyOOM= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.5/go.mod h1:CaFfXLYL376jgbP7VKC96uFcU8Rlavak0UlAwk1Dlhc= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5 h1:2k9KmFawS63euAkY4/ixVNsYYwrwnd5fIvgEKkfZFNM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5/go.mod h1:W+nd4wWDVkSUIox9bacmkBP5NMFQeTJ/xqNabpzSR38= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.5 h1:5UYvv8JUvllZsRnfrcMQ+hJ9jNICmcgKPAO1CER25Wg= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.5/go.mod h1:XX5gh4CB7wAs4KhcF46G6C8a2i7eupU19dcAAE+EydU= -github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM= -github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= +github.com/aws/aws-sdk-go-v2 v1.25.2 h1:/uiG1avJRgLGiQM9X3qJM8+Qa6KRGK5rRPuXE0HUM+w= +github.com/aws/aws-sdk-go-v2 v1.25.2/go.mod h1:Evoc5AsmtveRt1komDwIsjHFyrP5tDuF1D1U+6z6pNo= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 h1:gTK2uhtAPtFcdRRJilZPx8uJLL2J85xK11nKtWL0wfU= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1/go.mod h1:sxpLb+nZk7tIfCWChfd+h4QwHNUR57d8hA1cleTkjJo= +github.com/aws/aws-sdk-go-v2/config v1.27.1 h1:oxvGd/cielb+oumJkQmXI0i5tQCRqfdCHV58AfE0pGY= +github.com/aws/aws-sdk-go-v2/config v1.27.1/go.mod h1:SpmaZYWeTF91NQcnnp2AScnZawBWwdkYCupHRNIhVSQ= +github.com/aws/aws-sdk-go-v2/credentials v1.17.1 h1:H4WlK2OnVotRmbVgS8Ww2Z4B3/dDHxDS7cW6EiCECN4= +github.com/aws/aws-sdk-go-v2/credentials v1.17.1/go.mod h1:qTfT/OIE9RAVirZDq0PcEYOOM4Pkmf1Hrk1iInKRS4k= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.0 h1:xWCwjjvVz2ojYTP4kBKUuUh9ZrXfcAXpflhOUUeXg1k= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.0/go.mod h1:j3fACuqXg4oMTQOR2yY7m0NmJY0yBK4L4sLsRXq1Ins= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.2 h1:VEekE/fJWqAWYozxFQ07B+h8NdvTPAYhV13xIBenuO0= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.2/go.mod h1:8vozqAHmDNmoD4YbuDKIfpnLbByzngczL4My1RELLVo= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2 h1:bNo4LagzUKbjdxE0tIcR9pMzLR2U/Tgie1Hq1HQ3iH8= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2/go.mod h1:wRQv0nN6v9wDXuWThpovGQjqF1HFdcgWjporw14lS8k= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2 h1:EtOU5jsPdIQNP+6Q2C5e3d65NKT1PeCiQk+9OdzO12Q= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2/go.mod h1:tyF5sKccmDz0Bv4NrstEr+/9YkSPJHrcO7UsUKf7pWM= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.2 h1:en92G0Z7xlksoOylkUhuBSfJgijC7rHVLRdnIlHEs0E= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.2/go.mod h1:HgtQ/wN5G+8QSlK62lbOtNwQ3wTSByJ4wH2rCkPt+AE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 h1:EyBZibRTVAs6ECHZOw5/wlylS9OcTzwyjeQMudmREjE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1/go.mod h1:JKpmtYhhPs7D97NL/ltqz7yCkERFW5dOlHyVl66ZYF8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.2 h1:zSdTXYLwuXDNPUS+V41i1SFDXG7V0ITp0D9UT9Cvl18= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.2/go.mod h1:v8m8k+qVy95nYi7d56uP1QImleIIY25BPiNJYzPBdFE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.2 h1:5ffmXjPtwRExp1zc7gENLgCPyHFbhEPwVTkTiH9niSk= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.2/go.mod h1:Ru7vg1iQ7cR4i7SZ/JTLYN9kaXtbL69UdgG0OQWQxW0= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.2 h1:1oY1AVEisRI4HNuFoLdRUB0hC63ylDAN6Me3MrfclEg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.2/go.mod h1:KZ03VgvZwSjkT7fOetQ/wF3MZUvYFirlI1H5NklUNsY= +github.com/aws/aws-sdk-go-v2/service/s3 v1.51.1 h1:juZ+uGargZOrQGNxkVHr9HHR/0N+Yu8uekQnV7EAVRs= +github.com/aws/aws-sdk-go-v2/service/s3 v1.51.1/go.mod h1:SoR0c7Jnq8Tpmt0KSLXIavhjmaagRqQpe9r70W3POJg= +github.com/aws/aws-sdk-go-v2/service/sso v1.19.1 h1:GokXLGW3JkH/XzEVp1jDVRxty1eNGB7emkjDG1qxGK8= +github.com/aws/aws-sdk-go-v2/service/sso v1.19.1/go.mod h1:YqbU3RS/pkDVu+v+Nwxvn0i1WB0HkNWEePWbmODEbbs= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.22.1 h1:2oxSGiYNxTHsuRuPD9McWvcvR6s61G3ssZLyQzcxQL0= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.22.1/go.mod h1:olUAyg+FaoFaL/zFaeQQONjOZ9HXoxgvI/c7mQTYz7M= +github.com/aws/aws-sdk-go-v2/service/sts v1.27.1 h1:QFT2KUWaVwwGi5/2sQNBOViFpLSkZmiyiHUxE2k6sOU= +github.com/aws/aws-sdk-go-v2/service/sts v1.27.1/go.mod h1:nXfOBMWPokIbOY+Gi7a1psWMSvskUCemZzI+SMB7Akc= +github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw= +github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= @@ -340,10 +340,12 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/linode/linodego v1.28.0 h1:lzxxJebsYg5cCWRNDLyL2StW3sfMyAwf/FYfxFjFrlk= -github.com/linode/linodego v1.28.0/go.mod h1:5oAsx+uinHtVo6U77nXXXtox7MWzUW6aEkTOKXxA9uo= +github.com/linode/linodego v1.29.0 h1:gDSQWAbKMAQX8db9FDCXHhodQPrJmLcmthjx6m+PyV4= +github.com/linode/linodego v1.29.0/go.mod h1:3k6WvCM10gillgYcnoLqIL23ST27BD9HhMsCJWb3Bpk= github.com/linode/linodego/k8s v1.25.2 h1:PY6S0sAD3xANVvM9WY38bz9GqMTjIbytC8IJJ9Cv23o= github.com/linode/linodego/k8s v1.25.2/go.mod h1:DC1XCSRZRGsmaa/ggpDPSDUmOM6aK1bhSIP6+f9Cwhc= +github.com/linode/terraform-provider-linode/v2 v2.16.0 h1:PNxBS5GrJR8erWLE1jBqGIek/UNQL/A3a/LfrzwYeZU= +github.com/linode/terraform-provider-linode/v2 v2.16.0/go.mod h1:yUR1FUrY0e9hD84wx/op5pUSymsU4qeNGkY4cjf+gkw= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -432,8 +434,6 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/tchinmai7/terraform-provider-linode/v2 v2.0.0-20240212213046-468f25b69508 h1:u3jh3HD6dHK1AxGDCGVg6uIAXmiGxDCgylaco9n1wX8= -github.com/tchinmai7/terraform-provider-linode/v2 v2.0.0-20240212213046-468f25b69508/go.mod h1:aBTakKvYrwuKW1rCpFiW2pjvNnVXz3yJqUfDvtFiFOw= github.com/tmccombs/hcl2json v0.3.3 h1:+DLNYqpWE0CsOQiEZu+OZm5ZBImake3wtITYxQ8uLFQ= github.com/tmccombs/hcl2json v0.3.3/go.mod h1:Y2chtz2x9bAeRTvSibVRVgbLJhLJXKlUeIvjeVdnm4w= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= diff --git a/internal/controller/instance/sharedips/zz_controller.go b/internal/controller/instance/sharedips/zz_controller.go index 22d621d..98ed554 100755 --- a/internal/controller/instance/sharedips/zz_controller.go +++ b/internal/controller/instance/sharedips/zz_controller.go @@ -39,11 +39,11 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SharedIPs_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler), tjcontroller.WithStatusUpdates(false)) opts := []managed.ReconcilerOption{ managed.WithExternalConnecter( - tjcontroller.NewTerraformPluginSDKAsyncConnector(mgr.GetClient(), o.OperationTrackerStore, o.SetupFn, o.Provider.Resources["linode_instance_shared_ips"], - tjcontroller.WithTerraformPluginSDKAsyncLogger(o.Logger), - tjcontroller.WithTerraformPluginSDKAsyncConnectorEventHandler(eventHandler), - tjcontroller.WithTerraformPluginSDKAsyncCallbackProvider(ac), - tjcontroller.WithTerraformPluginSDKAsyncMetricRecorder(metrics.NewMetricRecorder(v1alpha1.SharedIPs_GroupVersionKind, mgr, o.PollInterval)), + tjcontroller.NewTerraformPluginFrameworkAsyncConnector(mgr.GetClient(), o.OperationTrackerStore, o.SetupFn, o.Provider.Resources["linode_instance_shared_ips"], + tjcontroller.WithTerraformPluginFrameworkAsyncLogger(o.Logger), + tjcontroller.WithTerraformPluginFrameworkAsyncConnectorEventHandler(eventHandler), + tjcontroller.WithTerraformPluginFrameworkAsyncCallbackProvider(ac), + tjcontroller.WithTerraformPluginFrameworkAsyncMetricRecorder(metrics.NewMetricRecorder(v1alpha1.SharedIPs_GroupVersionKind, mgr, o.PollInterval)), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), diff --git a/internal/controller/vpc/subnet/zz_controller.go b/internal/controller/vpc/subnet/zz_controller.go new file mode 100755 index 0000000..1f0bd09 --- /dev/null +++ b/internal/controller/vpc/subnet/zz_controller.go @@ -0,0 +1,78 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package subnet + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/metrics" + "github.com/pkg/errors" + ctrl "sigs.k8s.io/controller-runtime" + + v1alpha1 "github.com/linode/provider-linode/apis/vpc/v1alpha1" +) + +// Setup adds a controller that reconciles Subnet managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1alpha1.Subnet_GroupVersionKind.String()) + var initializers managed.InitializerChain + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Subnet_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Subnet_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler), tjcontroller.WithStatusUpdates(false)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter( + tjcontroller.NewTerraformPluginFrameworkAsyncConnector(mgr.GetClient(), o.OperationTrackerStore, o.SetupFn, o.Provider.Resources["linode_vpc_subnet"], + tjcontroller.WithTerraformPluginFrameworkAsyncLogger(o.Logger), + tjcontroller.WithTerraformPluginFrameworkAsyncConnectorEventHandler(eventHandler), + tjcontroller.WithTerraformPluginFrameworkAsyncCallbackProvider(ac), + tjcontroller.WithTerraformPluginFrameworkAsyncMetricRecorder(metrics.NewMetricRecorder(v1alpha1.Subnet_GroupVersionKind, mgr, o.PollInterval)), + )), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(tjcontroller.NewOperationTrackerFinalizer(o.OperationTrackerStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + + // register webhooks for the kind v1alpha1.Subnet + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Subnet{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Subnet") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Subnet_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Subnet{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/vpc/vpc/zz_controller.go b/internal/controller/vpc/vpc/zz_controller.go new file mode 100755 index 0000000..010443c --- /dev/null +++ b/internal/controller/vpc/vpc/zz_controller.go @@ -0,0 +1,78 @@ +// SPDX-FileCopyrightText: 2023 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +/* +Copyright 2022 Upbound Inc. +*/ + +// Code generated by upjet. DO NOT EDIT. + +package vpc + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/metrics" + "github.com/pkg/errors" + ctrl "sigs.k8s.io/controller-runtime" + + v1alpha1 "github.com/linode/provider-linode/apis/vpc/v1alpha1" +) + +// Setup adds a controller that reconciles VPC managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1alpha1.VPC_GroupVersionKind.String()) + var initializers managed.InitializerChain + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.VPC_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.VPC_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler), tjcontroller.WithStatusUpdates(false)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter( + tjcontroller.NewTerraformPluginFrameworkAsyncConnector(mgr.GetClient(), o.OperationTrackerStore, o.SetupFn, o.Provider.Resources["linode_vpc"], + tjcontroller.WithTerraformPluginFrameworkAsyncLogger(o.Logger), + tjcontroller.WithTerraformPluginFrameworkAsyncConnectorEventHandler(eventHandler), + tjcontroller.WithTerraformPluginFrameworkAsyncCallbackProvider(ac), + tjcontroller.WithTerraformPluginFrameworkAsyncMetricRecorder(metrics.NewMetricRecorder(v1alpha1.VPC_GroupVersionKind, mgr, o.PollInterval)), + )), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(tjcontroller.NewOperationTrackerFinalizer(o.OperationTrackerStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + + // register webhooks for the kind v1alpha1.VPC + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.VPC{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.VPC") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.VPC_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.VPC{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/zz_setup.go b/internal/controller/zz_setup.go index d79ca39..b26deb7 100755 --- a/internal/controller/zz_setup.go +++ b/internal/controller/zz_setup.go @@ -37,6 +37,8 @@ import ( token "github.com/linode/provider-linode/internal/controller/token/token" user "github.com/linode/provider-linode/internal/controller/user/user" volume "github.com/linode/provider-linode/internal/controller/volume/volume" + subnet "github.com/linode/provider-linode/internal/controller/vpc/subnet" + vpc "github.com/linode/provider-linode/internal/controller/vpc/vpc" ) // Setup creates all controllers with the supplied logger and adds them to @@ -71,6 +73,8 @@ func Setup(mgr ctrl.Manager, o controller.Options) error { token.Setup, user.Setup, volume.Setup, + subnet.Setup, + vpc.Setup, } { if err := setup(mgr, o); err != nil { return err diff --git a/package/crds/firewall.linode.upbound.io_firewalls.yaml b/package/crds/firewall.linode.upbound.io_firewalls.yaml index 1330af7..ed3e643 100644 --- a/package/crds/firewall.linode.upbound.io_firewalls.yaml +++ b/package/crds/firewall.linode.upbound.io_firewalls.yaml @@ -271,9 +271,9 @@ spec: 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. + Tags are case-insensitive and are for organizational purposes + only. An array of tags applied to this object. Tags are for + organizational purposes only. items: type: string type: array @@ -495,9 +495,9 @@ spec: 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. + Tags are case-insensitive and are for organizational purposes + only. An array of tags applied to this object. Tags are for + organizational purposes only. items: type: string type: array @@ -840,9 +840,9 @@ spec: 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. + Tags are case-insensitive and are for organizational purposes + only. An array of tags applied to this object. Tags are for + organizational purposes only. items: type: string type: array diff --git a/package/crds/instance.linode.upbound.io_configs.yaml b/package/crds/instance.linode.upbound.io_configs.yaml index 15b93b0..1bcdb6d 100644 --- a/package/crds/instance.linode.upbound.io_configs.yaml +++ b/package/crds/instance.linode.upbound.io_configs.yaml @@ -898,25 +898,72 @@ spec: Configuration Profile. items: properties: + ipRanges: + description: IPv4 CIDR VPC Subnet ranges that are routed + to this Interface. IPv6 ranges are also available to select + participants in the Beta program. List of VPC IPs or IP + ranges inside the VPC subnet. + items: + type: string + type: array 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. + 10.0.0.1/24) This field is only allowed for interfaces + with the vlan purpose. This Network Interface's private + IP address in Classless Inter-Domain Routing (CIDR) notation.This + attribute is only allowed for VLAN interfaces. type: string + ipv4: + description: The IPv4 configuration of the VPC interface.This + attribute is only allowed for VPC interfaces. + items: + properties: + nat11: + description: The public IP that will be used for the + one-to-one NAT purpose. If this is any, the public + IPv4 address assigned to this Linode is used on + this interface and will be 1:1 NATted with the VPC + IPv4 address. The public IP that will be used for + the one-to-one NAT purpose. + type: string + vpc: + description: purpose. The IP from the VPC subnet to + use for this interface. + type: string + type: object + type: array label: description: The Config’s label for display purposes only. - The name of this interface. + The name of the VALN. This attribute is required for VLAN + interfaces. This attribute is only allowed for VLAN interfaces. type: string + primary: + description: Whether the interface is the primary interface + that should have the default route for this Linode. This + field is only allowed for interfaces with the public or + vpc purpose. Whether the interface is the primary interface + that should have the default route for this Linode. + type: boolean purpose: - description: The type of interface. (public, vlan) The type - of interface. + description: The type of interface. (public, vlan, vpc) + The type of interface. type: string + subnetId: + description: The name of the VPC Subnet to join. This field + is only allowed and required for interfaces with the vpc + purpose. The ID of the subnet which the VPC interface + is connected to.This attribute is required for VPC interfaces.This + attribute is only allowed for VPC interfaces. + type: number 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”. + description: A Kernel ID to boot a Linode with. Default is linode/latest-64bit. + 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. Defaults + to “linode/latest-64bit”. type: string label: description: The Config’s label for display purposes only. The @@ -1863,25 +1910,72 @@ spec: Configuration Profile. items: properties: + ipRanges: + description: IPv4 CIDR VPC Subnet ranges that are routed + to this Interface. IPv6 ranges are also available to select + participants in the Beta program. List of VPC IPs or IP + ranges inside the VPC subnet. + items: + type: string + type: array 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. + 10.0.0.1/24) This field is only allowed for interfaces + with the vlan purpose. This Network Interface's private + IP address in Classless Inter-Domain Routing (CIDR) notation.This + attribute is only allowed for VLAN interfaces. type: string + ipv4: + description: The IPv4 configuration of the VPC interface.This + attribute is only allowed for VPC interfaces. + items: + properties: + nat11: + description: The public IP that will be used for the + one-to-one NAT purpose. If this is any, the public + IPv4 address assigned to this Linode is used on + this interface and will be 1:1 NATted with the VPC + IPv4 address. The public IP that will be used for + the one-to-one NAT purpose. + type: string + vpc: + description: purpose. The IP from the VPC subnet to + use for this interface. + type: string + type: object + type: array label: description: The Config’s label for display purposes only. - The name of this interface. + The name of the VALN. This attribute is required for VLAN + interfaces. This attribute is only allowed for VLAN interfaces. type: string + primary: + description: Whether the interface is the primary interface + that should have the default route for this Linode. This + field is only allowed for interfaces with the public or + vpc purpose. Whether the interface is the primary interface + that should have the default route for this Linode. + type: boolean purpose: - description: The type of interface. (public, vlan) The type - of interface. + description: The type of interface. (public, vlan, vpc) + The type of interface. type: string + subnetId: + description: The name of the VPC Subnet to join. This field + is only allowed and required for interfaces with the vpc + purpose. The ID of the subnet which the VPC interface + is connected to.This attribute is required for VPC interfaces.This + attribute is only allowed for VPC interfaces. + type: number 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”. + description: A Kernel ID to boot a Linode with. Default is linode/latest-64bit. + 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. Defaults + to “linode/latest-64bit”. type: string label: description: The Config’s label for display purposes only. The @@ -2364,25 +2458,84 @@ spec: Configuration Profile. items: properties: + active: + description: Whether this interface is currently booted + and active. + type: boolean + id: + description: The ID of the interface. + type: number + ipRanges: + description: IPv4 CIDR VPC Subnet ranges that are routed + to this Interface. IPv6 ranges are also available to select + participants in the Beta program. List of VPC IPs or IP + ranges inside the VPC subnet. + items: + type: string + type: array 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. + 10.0.0.1/24) This field is only allowed for interfaces + with the vlan purpose. This Network Interface's private + IP address in Classless Inter-Domain Routing (CIDR) notation.This + attribute is only allowed for VLAN interfaces. type: string + ipv4: + description: The IPv4 configuration of the VPC interface.This + attribute is only allowed for VPC interfaces. + items: + properties: + nat11: + description: The public IP that will be used for the + one-to-one NAT purpose. If this is any, the public + IPv4 address assigned to this Linode is used on + this interface and will be 1:1 NATted with the VPC + IPv4 address. The public IP that will be used for + the one-to-one NAT purpose. + type: string + vpc: + description: purpose. The IP from the VPC subnet to + use for this interface. + type: string + type: object + type: array label: description: The Config’s label for display purposes only. - The name of this interface. + The name of the VALN. This attribute is required for VLAN + interfaces. This attribute is only allowed for VLAN interfaces. type: string + primary: + description: Whether the interface is the primary interface + that should have the default route for this Linode. This + field is only allowed for interfaces with the public or + vpc purpose. Whether the interface is the primary interface + that should have the default route for this Linode. + type: boolean purpose: - description: The type of interface. (public, vlan) The type - of interface. + description: The type of interface. (public, vlan, vpc) + The type of interface. type: string + subnetId: + description: The name of the VPC Subnet to join. This field + is only allowed and required for interfaces with the vpc + purpose. The ID of the subnet which the VPC interface + is connected to.This attribute is required for VPC interfaces.This + attribute is only allowed for VPC interfaces. + type: number + vpcId: + description: The ID of VPC which this interface is attached + to. The ID of VPC of the subnet which the VPC interface + is connected to. + type: number 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”. + description: A Kernel ID to boot a Linode with. Default is linode/latest-64bit. + 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. Defaults + to “linode/latest-64bit”. type: string label: description: The Config’s label for display purposes only. The diff --git a/package/crds/instance.linode.upbound.io_disks.yaml b/package/crds/instance.linode.upbound.io_disks.yaml index 52c80f3..eec3782 100644 --- a/package/crds/instance.linode.upbound.io_disks.yaml +++ b/package/crds/instance.linode.upbound.io_disks.yaml @@ -70,19 +70,20 @@ spec: 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. + deploying from an Image. (Requires 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 x-kubernetes-list-type: set 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. + SSH keys, the keys will be appended to the root user's ~/.ssh/authorized_keys + file. (Requires image) 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 @@ -178,9 +179,9 @@ spec: type: object rootPassSecretRef: description: The root user’s password on a newly-created Linode - Disk when deploying from an Image. This sets the root user’s - password on a newly-created Linode Disk when deploying from - an Image. + Disk when deploying from an Image. (Requires image) This sets + the root user’s password on a newly-created Linode Disk when + deploying from an Image. properties: key: description: The key to select. @@ -203,11 +204,11 @@ spec: stackscriptDataSecretRef: 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. 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. + Only accepted if stackscript_id is given. (Requires image) 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. properties: name: description: Name of the secret. @@ -221,9 +222,9 @@ spec: type: object 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. + to be run during deployment of this Disk. (Requires image) A + StackScript ID that will cause the referenced StackScript to + be run during deployment of this Linode. type: number stackscriptIdRef: description: Reference to a Stackscript in stackscript to populate @@ -316,19 +317,20 @@ spec: 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. + deploying from an Image. (Requires 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 x-kubernetes-list-type: set 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. + SSH keys, the keys will be appended to the root user's ~/.ssh/authorized_keys + file. (Requires image) 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 @@ -428,9 +430,9 @@ spec: 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. + to be run during deployment of this Disk. (Requires image) A + StackScript ID that will cause the referenced StackScript to + be run during deployment of this Linode. type: number stackscriptIdRef: description: Reference to a Stackscript in stackscript to populate @@ -685,19 +687,20 @@ spec: 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. + deploying from an Image. (Requires 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 x-kubernetes-list-type: set 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. + SSH keys, the keys will be appended to the root user's ~/.ssh/authorized_keys + file. (Requires image) 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 @@ -729,9 +732,9 @@ spec: 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. + to be run during deployment of this Disk. (Requires image) 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. diff --git a/package/crds/instance.linode.upbound.io_instances.yaml b/package/crds/instance.linode.upbound.io_instances.yaml index 02dd340..8a77164 100644 --- a/package/crds/instance.linode.upbound.io_instances.yaml +++ b/package/crds/instance.linode.upbound.io_instances.yaml @@ -426,20 +426,75 @@ spec: Configuration Profile. items: properties: + ipRanges: + description: IPv4 CIDR VPC Subnet ranges that are + routed to this Interface. IPv6 ranges are also available + to select participants in the Beta program. List + of VPC IPs or IP ranges inside the VPC subnet. + items: + type: string + type: array ipamAddress: description: This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. - The IPAM Address of this interface. + (e.g. 10.0.0.1/24) This field is only allowed for + interfaces with the vlan purpose. This Network Interface's + private IP address in Classless Inter-Domain Routing + (CIDR) notation.This attribute is only allowed for + VLAN interfaces. 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. The IPv4 configuration of the VPC + interface.This attribute is only allowed for VPC + interfaces. + items: + properties: + nat11: + description: The public IP that will be used + for the one-to-one NAT purpose. If this is + any, the public IPv4 address assigned to this + Linode is used on this interface and will + be 1:1 NATted with the VPC IPv4 address. The + public IP that will be used for the one-to-one + NAT purpose. + type: string + vpc: + description: purpose. The IP from the VPC subnet + to use for this interface. + type: string + type: object + type: array 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. + will be assigned. The name of the VALN. This attribute + is required for VLAN interfaces. This attribute + is only allowed for VLAN interfaces. type: string + primary: + description: Whether the interface is the primary + interface that should have the default route for + this Linode. This field is only allowed for interfaces + with the public or vpc purpose. Whether the interface + is the primary interface that should have the default + route for this Linode. + type: boolean purpose: - description: The type of interface. (public, vlan) - The purpose of this interface. + description: The type of interface. (public, vlan, + vpc) The type of interface. type: string + subnetId: + description: The name of the VPC Subnet to join. This + field is only allowed and required for interfaces + with the vpc purpose. The ID of the subnet which + the VPC interface is connected to.This attribute + is required for VPC interfaces.This attribute is + only allowed for VPC interfaces. + type: number type: object type: array kernel: @@ -515,8 +570,8 @@ spec: 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 + Images available for you to use. Examples are linode/debian12, + linode/fedora39, linode/ubuntu22.04, 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 @@ -587,15 +642,21 @@ spec: type: number type: object type: array + firewallId: + description: The ID of the Firewall to attach to the instance + upon creation. Changing The ID of the firewall applied to the + Linode instance during creation. + type: number group: - description: The display group of the Linode instance. The display - group of the Linode instance. + description: A deprecated property denoting a group label for + this Linode. We recommend using the tags attribute instead. + The display group of the Linode instance. 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, + you to use. Examples are linode/debian12, linode/fedora39, linode/ubuntu22.04, 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 @@ -609,20 +670,70 @@ spec: must be declared in the config block. items: properties: + ipRanges: + description: IPv4 CIDR VPC Subnet ranges that are routed + to this Interface. IPv6 ranges are also available to select + participants in the Beta program. List of VPC IPs or IP + ranges inside the VPC subnet. + items: + type: string + type: array ipamAddress: description: This Network Interface’s private IP address - in Classless Inter-Domain Routing (CIDR) notation. The - IPAM Address of this interface. + in Classless Inter-Domain Routing (CIDR) notation. (e.g. + 10.0.0.1/24) This field is only allowed for interfaces + with the vlan purpose. This Network Interface's private + IP address in Classless Inter-Domain Routing (CIDR) notation.This + attribute is only allowed for VLAN interfaces. 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. + The IPv4 configuration of the VPC interface.This attribute + is only allowed for VPC interfaces. + items: + properties: + nat11: + description: The public IP that will be used for the + one-to-one NAT purpose. If this is any, the public + IPv4 address assigned to this Linode is used on + this interface and will be 1:1 NATted with the VPC + IPv4 address. The public IP that will be used for + the one-to-one NAT purpose. + type: string + vpc: + description: purpose. The IP from the VPC subnet to + use for this interface. + type: string + type: object + type: array 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. + will be assigned. The name of the VALN. This attribute + is required for VLAN interfaces. This attribute is only + allowed for VLAN interfaces. type: string + primary: + description: Whether the interface is the primary interface + that should have the default route for this Linode. This + field is only allowed for interfaces with the public or + vpc purpose. Whether the interface is the primary interface + that should have the default route for this Linode. + type: boolean purpose: - description: The type of interface. (public, vlan) The purpose - of this interface. + description: The type of interface. (public, vlan, vpc) + The type of interface. type: string + subnetId: + description: The name of the VPC Subnet to join. This field + is only allowed and required for interfaces with the vpc + purpose. The ID of the subnet which the VPC interface + is connected to.This attribute is required for VPC interfaces.This + attribute is only allowed for VPC interfaces. + type: number type: object type: array label: @@ -639,10 +750,19 @@ spec: description: The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information - on encoding content for this field. + on encoding content for this field. The base64-encoded + user-defined data exposed to this instance through the + Linode Metadata service. Refer to the base64encode(...) + function for information on encoding content for this + field. type: string type: object type: array + migrationType: + description: The type of migration to use when updating the type + or region of a Linode. (cold, warm; default cold) The type of + migration to use for resize and migration operations. + 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 @@ -670,7 +790,7 @@ spec: type: boolean rootPassSecretRef: description: The initial password for the root user account. This - value can not be imported. The password that will be initialially + value can not be imported. The password that will be initially assigned to the 'root' user account. properties: key: @@ -809,9 +929,9 @@ spec: 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. + description: A list of tags applied to this object. Tags are case-insensitive + and are for organizational purposes only. An array of tags applied + to this object. Tags are for organizational purposes only. items: type: string type: array @@ -1208,20 +1328,75 @@ spec: Configuration Profile. items: properties: + ipRanges: + description: IPv4 CIDR VPC Subnet ranges that are + routed to this Interface. IPv6 ranges are also available + to select participants in the Beta program. List + of VPC IPs or IP ranges inside the VPC subnet. + items: + type: string + type: array ipamAddress: description: This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. - The IPAM Address of this interface. + (e.g. 10.0.0.1/24) This field is only allowed for + interfaces with the vlan purpose. This Network Interface's + private IP address in Classless Inter-Domain Routing + (CIDR) notation.This attribute is only allowed for + VLAN interfaces. 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. The IPv4 configuration of the VPC + interface.This attribute is only allowed for VPC + interfaces. + items: + properties: + nat11: + description: The public IP that will be used + for the one-to-one NAT purpose. If this is + any, the public IPv4 address assigned to this + Linode is used on this interface and will + be 1:1 NATted with the VPC IPv4 address. The + public IP that will be used for the one-to-one + NAT purpose. + type: string + vpc: + description: purpose. The IP from the VPC subnet + to use for this interface. + type: string + type: object + type: array 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. + will be assigned. The name of the VALN. This attribute + is required for VLAN interfaces. This attribute + is only allowed for VLAN interfaces. type: string + primary: + description: Whether the interface is the primary + interface that should have the default route for + this Linode. This field is only allowed for interfaces + with the public or vpc purpose. Whether the interface + is the primary interface that should have the default + route for this Linode. + type: boolean purpose: - description: The type of interface. (public, vlan) - The purpose of this interface. + description: The type of interface. (public, vlan, + vpc) The type of interface. type: string + subnetId: + description: The name of the VPC Subnet to join. This + field is only allowed and required for interfaces + with the vpc purpose. The ID of the subnet which + the VPC interface is connected to.This attribute + is required for VPC interfaces.This attribute is + only allowed for VPC interfaces. + type: number type: object type: array kernel: @@ -1297,8 +1472,8 @@ spec: 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 + Images available for you to use. Examples are linode/debian12, + linode/fedora39, linode/ubuntu22.04, 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 @@ -1329,15 +1504,21 @@ spec: type: number type: object type: array + firewallId: + description: The ID of the Firewall to attach to the instance + upon creation. Changing The ID of the firewall applied to the + Linode instance during creation. + type: number group: - description: The display group of the Linode instance. The display - group of the Linode instance. + description: A deprecated property denoting a group label for + this Linode. We recommend using the tags attribute instead. + The display group of the Linode instance. 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, + you to use. Examples are linode/debian12, linode/fedora39, linode/ubuntu22.04, 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 @@ -1351,20 +1532,70 @@ spec: must be declared in the config block. items: properties: + ipRanges: + description: IPv4 CIDR VPC Subnet ranges that are routed + to this Interface. IPv6 ranges are also available to select + participants in the Beta program. List of VPC IPs or IP + ranges inside the VPC subnet. + items: + type: string + type: array ipamAddress: description: This Network Interface’s private IP address - in Classless Inter-Domain Routing (CIDR) notation. The - IPAM Address of this interface. + in Classless Inter-Domain Routing (CIDR) notation. (e.g. + 10.0.0.1/24) This field is only allowed for interfaces + with the vlan purpose. This Network Interface's private + IP address in Classless Inter-Domain Routing (CIDR) notation.This + attribute is only allowed for VLAN interfaces. 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. + The IPv4 configuration of the VPC interface.This attribute + is only allowed for VPC interfaces. + items: + properties: + nat11: + description: The public IP that will be used for the + one-to-one NAT purpose. If this is any, the public + IPv4 address assigned to this Linode is used on + this interface and will be 1:1 NATted with the VPC + IPv4 address. The public IP that will be used for + the one-to-one NAT purpose. + type: string + vpc: + description: purpose. The IP from the VPC subnet to + use for this interface. + type: string + type: object + type: array 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. + will be assigned. The name of the VALN. This attribute + is required for VLAN interfaces. This attribute is only + allowed for VLAN interfaces. type: string + primary: + description: Whether the interface is the primary interface + that should have the default route for this Linode. This + field is only allowed for interfaces with the public or + vpc purpose. Whether the interface is the primary interface + that should have the default route for this Linode. + type: boolean purpose: - description: The type of interface. (public, vlan) The purpose - of this interface. + description: The type of interface. (public, vlan, vpc) + The type of interface. type: string + subnetId: + description: The name of the VPC Subnet to join. This field + is only allowed and required for interfaces with the vpc + purpose. The ID of the subnet which the VPC interface + is connected to.This attribute is required for VPC interfaces.This + attribute is only allowed for VPC interfaces. + type: number type: object type: array label: @@ -1381,10 +1612,19 @@ spec: description: The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information - on encoding content for this field. + on encoding content for this field. The base64-encoded + user-defined data exposed to this instance through the + Linode Metadata service. Refer to the base64encode(...) + function for information on encoding content for this + field. type: string type: object type: array + migrationType: + description: The type of migration to use when updating the type + or region of a Linode. (cold, warm; default cold) The type of + migration to use for resize and migration operations. + 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 @@ -1512,9 +1752,9 @@ spec: 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. + description: A list of tags applied to this object. Tags are case-insensitive + and are for organizational purposes only. An array of tags applied + to this object. Tags are for organizational purposes only. items: type: string type: array @@ -2103,25 +2343,97 @@ spec: type: boolean type: object type: array + id: + description: (Computed) The ID of the disk in the Linode + API. The unique ID of this Config. + type: number interface: description: An array of Network Interfaces for this Linode’s Configuration Profile. items: properties: + active: + description: Whether this interface is currently booted + and active. + type: boolean + id: + description: (Computed) The ID of the disk in the + Linode API. The ID of the interface. + type: number + ipRanges: + description: IPv4 CIDR VPC Subnet ranges that are + routed to this Interface. IPv6 ranges are also available + to select participants in the Beta program. List + of VPC IPs or IP ranges inside the VPC subnet. + items: + type: string + type: array ipamAddress: description: This Network Interface’s private IP address in Classless Inter-Domain Routing (CIDR) notation. - The IPAM Address of this interface. + (e.g. 10.0.0.1/24) This field is only allowed for + interfaces with the vlan purpose. This Network Interface's + private IP address in Classless Inter-Domain Routing + (CIDR) notation.This attribute is only allowed for + VLAN interfaces. 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. The IPv4 configuration of the VPC + interface.This attribute is only allowed for VPC + interfaces. + items: + properties: + nat11: + description: The public IP that will be used + for the one-to-one NAT purpose. If this is + any, the public IPv4 address assigned to this + Linode is used on this interface and will + be 1:1 NATted with the VPC IPv4 address. The + public IP that will be used for the one-to-one + NAT purpose. + type: string + vpc: + description: purpose. The IP from the VPC subnet + to use for this interface. + type: string + type: object + type: array 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. + will be assigned. The name of the VALN. This attribute + is required for VLAN interfaces. This attribute + is only allowed for VLAN interfaces. type: string + primary: + description: Whether the interface is the primary + interface that should have the default route for + this Linode. This field is only allowed for interfaces + with the public or vpc purpose. Whether the interface + is the primary interface that should have the default + route for this Linode. + type: boolean purpose: - description: The type of interface. (public, vlan) - The purpose of this interface. + description: The type of interface. (public, vlan, + vpc) The type of interface. type: string + subnetId: + description: The name of the VPC Subnet to join. This + field is only allowed and required for interfaces + with the vpc purpose. The ID of the subnet which + the VPC interface is connected to.This attribute + is required for VPC interfaces.This attribute is + only allowed for VPC interfaces. + type: number + vpcId: + description: The ID of VPC which this interface is + attached to. The ID of VPC of the subnet which the + VPC interface is connected to. + type: number type: object type: array kernel: @@ -2202,8 +2514,8 @@ spec: 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 + Images available for you to use. Examples are linode/debian12, + linode/fedora39, linode/ubuntu22.04, 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 @@ -2234,12 +2546,19 @@ spec: type: number type: object type: array + firewallId: + description: The ID of the Firewall to attach to the instance + upon creation. Changing The ID of the firewall applied to the + Linode instance during creation. + type: number group: - description: The display group of the Linode instance. The display - group of the Linode instance. + description: A deprecated property denoting a group label for + this Linode. We recommend using the tags attribute instead. + The display group of the Linode instance. type: string hasUserData: - description: Whether or not this Instance was created with user-data. + description: Whether this Instance was created with user-data. + Whether or not this Instance was created with user-data. type: boolean hostUuid: description: (Computed) The ID of the disk in the Linode API. @@ -2252,7 +2571,7 @@ spec: 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, + you to use. Examples are linode/debian12, linode/fedora39, linode/ubuntu22.04, 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 @@ -2266,20 +2585,83 @@ spec: must be declared in the config block. items: properties: + active: + description: Whether this interface is currently booted + and active. + type: boolean + id: + description: (Computed) The ID of the disk in the Linode + API. The ID of the interface. + type: number + ipRanges: + description: IPv4 CIDR VPC Subnet ranges that are routed + to this Interface. IPv6 ranges are also available to select + participants in the Beta program. List of VPC IPs or IP + ranges inside the VPC subnet. + items: + type: string + type: array ipamAddress: description: This Network Interface’s private IP address - in Classless Inter-Domain Routing (CIDR) notation. The - IPAM Address of this interface. + in Classless Inter-Domain Routing (CIDR) notation. (e.g. + 10.0.0.1/24) This field is only allowed for interfaces + with the vlan purpose. This Network Interface's private + IP address in Classless Inter-Domain Routing (CIDR) notation.This + attribute is only allowed for VLAN interfaces. 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. + The IPv4 configuration of the VPC interface.This attribute + is only allowed for VPC interfaces. + items: + properties: + nat11: + description: The public IP that will be used for the + one-to-one NAT purpose. If this is any, the public + IPv4 address assigned to this Linode is used on + this interface and will be 1:1 NATted with the VPC + IPv4 address. The public IP that will be used for + the one-to-one NAT purpose. + type: string + vpc: + description: purpose. The IP from the VPC subnet to + use for this interface. + type: string + type: object + type: array 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. + will be assigned. The name of the VALN. This attribute + is required for VLAN interfaces. This attribute is only + allowed for VLAN interfaces. type: string + primary: + description: Whether the interface is the primary interface + that should have the default route for this Linode. This + field is only allowed for interfaces with the public or + vpc purpose. Whether the interface is the primary interface + that should have the default route for this Linode. + type: boolean purpose: - description: The type of interface. (public, vlan) The purpose - of this interface. + description: The type of interface. (public, vlan, vpc) + The type of interface. type: string + subnetId: + description: The name of the VPC Subnet to join. This field + is only allowed and required for interfaces with the vpc + purpose. The ID of the subnet which the VPC interface + is connected to.This attribute is required for VPC interfaces.This + attribute is only allowed for VPC interfaces. + type: number + vpcId: + description: The ID of VPC which this interface is attached + to. The ID of VPC of the subnet which the VPC interface + is connected to. + type: number type: object type: array ipAddress: @@ -2322,10 +2704,19 @@ spec: description: The base64-encoded user-defined data exposed to this instance through the Linode Metadata service. Refer to the base64encode(...) function for information - on encoding content for this field. + on encoding content for this field. The base64-encoded + user-defined data exposed to this instance through the + Linode Metadata service. Refer to the base64encode(...) + function for information on encoding content for this + field. type: string type: object type: array + migrationType: + description: The type of migration to use when updating the type + or region of a Linode. (cold, warm; default cold) The type of + migration to use for resize and migration operations. + 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 @@ -2421,9 +2812,9 @@ spec: 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. + description: A list of tags applied to this object. Tags are case-insensitive + and are for organizational purposes only. An array of tags applied + to this object. Tags are for organizational purposes only. items: type: string type: array diff --git a/package/crds/instance.linode.upbound.io_ips.yaml b/package/crds/instance.linode.upbound.io_ips.yaml index 22bc7e4..8a27a00 100644 --- a/package/crds/instance.linode.upbound.io_ips.yaml +++ b/package/crds/instance.linode.upbound.io_ips.yaml @@ -617,6 +617,20 @@ spec: description: The type of IP address. (ipv4, ipv6, ipv6/pool, ipv6/range) The type of IP address. type: string + vpcNat11: + description: Contains information about the NAT 1:1 mapping of + a public IP address to a VPC subnet. + items: + properties: + address: + description: The resulting IPv4 address. + type: string + subnetId: + type: number + vpcId: + type: number + type: object + type: array type: object conditions: description: Conditions of the resource. diff --git a/package/crds/lke.linode.upbound.io_clusters.yaml b/package/crds/lke.linode.upbound.io_clusters.yaml index a21bd8b..cf07587 100644 --- a/package/crds/lke.linode.upbound.io_clusters.yaml +++ b/package/crds/lke.linode.upbound.io_clusters.yaml @@ -111,8 +111,9 @@ spec: type: object type: array count: - description: The number of nodes in the Node Pool. The number - of nodes in the Node Pool. + description: The number of nodes in the Node Pool. If undefined + with an autoscaler the initial node count will equal the + autoscaler minimum. The number of nodes in the Node Pool. type: number type: description: A Linode Type for all of the nodes in the Node @@ -127,9 +128,9 @@ spec: 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. + Tags are case-insensitive and are for organizational purposes + only. An array of tags applied to this object. Tags are for + organizational purposes only. items: type: string type: array @@ -191,8 +192,9 @@ spec: type: object type: array count: - description: The number of nodes in the Node Pool. The number - of nodes in the Node Pool. + description: The number of nodes in the Node Pool. If undefined + with an autoscaler the initial node count will equal the + autoscaler minimum. The number of nodes in the Node Pool. type: number type: description: A Linode Type for all of the nodes in the Node @@ -207,9 +209,9 @@ spec: 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. + Tags are case-insensitive and are for organizational purposes + only. An array of tags applied to this object. Tags are for + organizational purposes only. items: type: string type: array @@ -454,8 +456,9 @@ spec: type: object type: array count: - description: The number of nodes in the Node Pool. The number - of nodes in the Node Pool. + description: The number of nodes in the Node Pool. If undefined + with an autoscaler the initial node count will equal the + autoscaler minimum. The number of nodes in the Node Pool. type: number id: description: The ID of the cluster. The ID of the Node Pool. @@ -491,9 +494,9 @@ spec: 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. + Tags are case-insensitive and are for organizational purposes + only. An array of tags applied to this object. Tags are for + organizational purposes only. items: type: string type: array diff --git a/package/crds/nodebalancer.linode.upbound.io_nodebalancers.yaml b/package/crds/nodebalancer.linode.upbound.io_nodebalancers.yaml index fe622dc..39e2db7 100644 --- a/package/crds/nodebalancer.linode.upbound.io_nodebalancers.yaml +++ b/package/crds/nodebalancer.linode.upbound.io_nodebalancers.yaml @@ -73,7 +73,8 @@ spec: (0-20). Set to 0 (zero) to disable throttling. type: number firewallId: - description: ID for the firewall you'd like to use with this NodeBalancer. + description: The Firewall's ID. ID for the firewall you'd like + to use with this NodeBalancer. type: number label: description: The label of the Linode NodeBalancer The label of @@ -85,9 +86,9 @@ spec: . 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. + description: A list of tags applied to this object. Tags are case-insensitive + and are for organizational purposes only. An array of tags applied + to this object. Tags are for organizational purposes only. items: type: string type: array @@ -111,7 +112,8 @@ spec: (0-20). Set to 0 (zero) to disable throttling. type: number firewallId: - description: ID for the firewall you'd like to use with this NodeBalancer. + description: The Firewall's ID. ID for the firewall you'd like + to use with this NodeBalancer. type: number label: description: The label of the Linode NodeBalancer The label of @@ -123,9 +125,9 @@ spec: . 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. + description: A list of tags applied to this object. Tags are case-insensitive + and are for organizational purposes only. An array of tags applied + to this object. Tags are for organizational purposes only. items: type: string type: array @@ -306,13 +308,117 @@ spec: was created. type: string firewallId: - description: ID for the firewall you'd like to use with this NodeBalancer. + description: The Firewall's ID. ID for the firewall you'd like + to use with this NodeBalancer. type: number + firewalls: + description: A list of Firewalls assigned to this NodeBalancer. + items: + properties: + created: + description: When this NodeBalancer was created + type: string + id: + description: The Firewall's ID. + type: number + inbound: + items: + properties: + action: + 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. + type: string + ipv4: + description: The Public IPv4 Address of this NodeBalancer + items: + type: string + type: array + ipv6: + description: The Public IPv6 Address of this NodeBalancer + items: + type: string + type: array + label: + description: The label of the Linode NodeBalancer + type: string + ports: + description: 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) + type: string + type: object + type: array + inboundPolicy: + description: The default behavior for inbound traffic. (ACCEPT, + DROP) + type: string + label: + description: The label of the Linode NodeBalancer + type: string + outbound: + items: + properties: + action: + 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. + type: string + ipv4: + description: The Public IPv4 Address of this NodeBalancer + items: + type: string + type: array + ipv6: + description: The Public IPv6 Address of this NodeBalancer + items: + type: string + type: array + label: + description: The label of the Linode NodeBalancer + type: string + ports: + description: 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) + type: string + type: object + type: array + outboundPolicy: + description: The default behavior for outbound traffic. + (ACCEPT, DROP) + type: string + status: + description: The status of the firewall. (enabled, disabled, + deleted) + type: string + tags: + description: A list of tags applied to this object. Tags + are case-insensitive and are for organizational purposes + only. + items: + type: string + type: array + x-kubernetes-list-type: set + updated: + description: When this NodeBalancer was last updated. + type: string + type: object + type: array hostname: description: This NodeBalancer's hostname, ending with .nodebalancer.linode.com This NodeBalancer's hostname, ending with .nodebalancer.linode.com type: string id: + description: The Firewall's ID. type: string ipv4: description: The Public IPv4 Address of this NodeBalancer The @@ -332,9 +438,9 @@ spec: . 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. + description: A list of tags applied to this object. Tags are case-insensitive + and are for organizational purposes only. An array of tags applied + to this object. Tags are for organizational purposes only. items: type: string type: array diff --git a/package/crds/objectstorage.linode.upbound.io_buckets.yaml b/package/crds/objectstorage.linode.upbound.io_buckets.yaml index 68b392a..53f729e 100644 --- a/package/crds/objectstorage.linode.upbound.io_buckets.yaml +++ b/package/crds/objectstorage.linode.upbound.io_buckets.yaml @@ -809,6 +809,9 @@ spec: origins. If true, the bucket will be created with CORS enabled for all origins. type: boolean + endpoint: + description: The endpoint for the bucket used for s3 connections. + type: string hostname: description: The hostname where this bucket can be accessed. This hostname can be accessed through a browser if the bucket is diff --git a/package/crds/objectstorage.linode.upbound.io_objects.yaml b/package/crds/objectstorage.linode.upbound.io_objects.yaml index f88be43..aa36c90 100644 --- a/package/crds/objectstorage.linode.upbound.io_objects.yaml +++ b/package/crds/objectstorage.linode.upbound.io_objects.yaml @@ -196,6 +196,11 @@ spec: object data, e.g. application/octet-stream. All Valid MIME Types are valid for this input. The MIME type of the content. type: string + endpoint: + description: Used with the s3 client to make bucket changes and + will be computed automatically if left blank, override for testing/debug + purposes. The endpoint for the bucket used for s3 connections. + type: string etag: description: Used to trigger updates.11.11.11 or earlier). The specific version of this object. @@ -445,6 +450,11 @@ spec: object data, e.g. application/octet-stream. All Valid MIME Types are valid for this input. The MIME type of the content. type: string + endpoint: + description: Used with the s3 client to make bucket changes and + will be computed automatically if left blank, override for testing/debug + purposes. The endpoint for the bucket used for s3 connections. + type: string etag: description: Used to trigger updates.11.11.11 or earlier). The specific version of this object. @@ -787,6 +797,11 @@ spec: object data, e.g. application/octet-stream. All Valid MIME Types are valid for this input. The MIME type of the content. type: string + endpoint: + description: Used with the s3 client to make bucket changes and + will be computed automatically if left blank, override for testing/debug + purposes. The endpoint for the bucket used for s3 connections. + type: string etag: description: Used to trigger updates.11.11.11 or earlier). The specific version of this object. diff --git a/package/crds/user.linode.upbound.io_users.yaml b/package/crds/user.linode.upbound.io_users.yaml index a230f70..cbce660 100644 --- a/package/crds/user.linode.upbound.io_users.yaml +++ b/package/crds/user.linode.upbound.io_users.yaml @@ -108,8 +108,10 @@ spec: 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. + actions, like billing information. (read_only, read_write) + 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, @@ -317,8 +319,10 @@ spec: 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. + actions, like billing information. (read_only, read_write) + 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, @@ -688,8 +692,10 @@ spec: 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. + actions, like billing information. (read_only, read_write) + 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, diff --git a/package/crds/volume.linode.upbound.io_volumes.yaml b/package/crds/volume.linode.upbound.io_volumes.yaml index 9f6139c..0d03894 100644 --- a/package/crds/volume.linode.upbound.io_volumes.yaml +++ b/package/crds/volume.linode.upbound.io_volumes.yaml @@ -162,9 +162,9 @@ spec: ID of a volume to clone.' 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. + description: A list of tags applied to this object. Tags are case-insensitive + and are for organizational purposes only. An array of tags applied + to this object. Tags are for organizational purposes only. items: type: string type: array @@ -278,9 +278,9 @@ spec: ID of a volume to clone.' 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. + description: A list of tags applied to this object. Tags are case-insensitive + and are for organizational purposes only. An array of tags applied + to this object. Tags are for organizational purposes only. items: type: string type: array @@ -493,9 +493,9 @@ spec: 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. + description: A list of tags applied to this object. Tags are case-insensitive + and are for organizational purposes only. An array of tags applied + to this object. Tags are for organizational purposes only. items: type: string type: array diff --git a/package/crds/vpc.linode.upbound.io_subnets.yaml b/package/crds/vpc.linode.upbound.io_subnets.yaml new file mode 100644 index 0000000..50d9c1b --- /dev/null +++ b/package/crds/vpc.linode.upbound.io_subnets.yaml @@ -0,0 +1,514 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + name: subnets.vpc.linode.upbound.io +spec: + group: vpc.linode.upbound.io + names: + categories: + - crossplane + - managed + - linode + kind: Subnet + listKind: SubnetList + plural: subnets + singular: subnet + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: Subnet is the Schema for the Subnets API. Manages a Linode VPC + subnet. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: SubnetSpec defines the desired state of Subnet + properties: + deletionPolicy: + default: Delete + description: 'DeletionPolicy specifies what will happen to the underlying + external when this managed resource is deleted - either "Delete" + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicies field in a future release. Currently, + both could be set independently and non-default values would be + honored if the feature flag is enabled. See the design doc for more + information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223' + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + ipv4: + description: The IPv4 range of this subnet in CIDR format. The + IPv4 range of this subnet in CIDR format. + type: string + label: + description: The label of the VPC. Only contains ASCII letters, + digits and dashes. The label of the VPC subnet. + type: string + vpcId: + description: The id of the parent VPC for this VPC Subnet. The + id of the parent VPC for this VPC Subnet + type: number + vpcIdRef: + description: Reference to a VPC in vpc to populate vpcId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + vpcIdSelector: + description: Selector for a VPC in vpc to populate vpcId. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + type: object + initProvider: + description: THIS IS A BETA FIELD. It will be honored unless the Management + Policies feature flag is disabled. InitProvider holds the same fields + as ForProvider, with the exception of Identifier and other resource + reference fields. The fields that are in InitProvider are merged + into ForProvider when the resource is created. The same fields are + also added to the terraform ignore_changes hook, to avoid updating + them after creation. This is useful for fields that are required + on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, + like an autoscaler. + properties: + ipv4: + description: The IPv4 range of this subnet in CIDR format. The + IPv4 range of this subnet in CIDR format. + type: string + label: + description: The label of the VPC. Only contains ASCII letters, + digits and dashes. The label of the VPC subnet. + type: string + vpcId: + description: The id of the parent VPC for this VPC Subnet. The + id of the parent VPC for this VPC Subnet + type: number + vpcIdRef: + description: Reference to a VPC in vpc to populate vpcId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + vpcIdSelector: + description: Selector for a VPC in vpc to populate vpcId. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + type: object + managementPolicies: + default: + - '*' + description: 'THIS IS A BETA FIELD. It is on by default but can be + opted out through a Crossplane feature flag. ManagementPolicies + specify the array of actions Crossplane is allowed to take on the + managed and external resources. This field is planned to replace + the DeletionPolicy field in a future release. Currently, both could + be set independently and non-default values would be honored if + the feature flag is enabled. If both are custom, the DeletionPolicy + field will be ignored. See the design doc for more information: + https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md' + items: + description: A ManagementAction represents an action that the Crossplane + controllers can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: ProviderConfigReference specifies how the provider that + will be used to create, observe, update, and delete this managed + resource should be configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of this + reference is required. The default is 'Required', which + means the reconcile will fail if the reference cannot be + resolved. 'Optional' means this reference will be a no-op + if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will attempt + to resolve the reference only when the corresponding field + is not present. Use 'Always' to resolve the reference on + every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: PublishConnectionDetailsTo specifies the connection secret + config which contains a name, metadata and a reference to secret + store config to which any connection details for this managed resource + should be written. Connection details frequently include the endpoint, + username, and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: SecretStoreConfigRef specifies which secret store + config should be used for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: Annotations are the annotations to be added to + connection secret. - For Kubernetes secrets, this will be + used as "metadata.annotations". - It is up to Secret Store + implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: Labels are the labels/tags to be added to connection + secret. - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store + types. + type: object + type: + description: Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: WriteConnectionSecretToReference specifies the namespace + and name of a Secret to which any connection details for this managed + resource should be written. Connection details frequently include + the endpoint, username, and password required to connect to the + managed resource. This field is planned to be replaced in a future + release in favor of PublishConnectionDetailsTo. Currently, both + could be set independently and connection details would be published + to both without affecting each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + x-kubernetes-validations: + - message: spec.forProvider.ipv4 is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.ipv4) + || (has(self.initProvider) && has(self.initProvider.ipv4))' + - message: spec.forProvider.label is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.label) + || (has(self.initProvider) && has(self.initProvider.label))' + status: + description: SubnetStatus defines the observed state of Subnet. + properties: + atProvider: + properties: + created: + description: The date and time when the VPC was created. The date + and time when the VPC Subnet was created. + type: string + id: + description: The ID of the VPC Subnet. + type: string + ipv4: + description: The IPv4 range of this subnet in CIDR format. The + IPv4 range of this subnet in CIDR format. + type: string + label: + description: The label of the VPC. Only contains ASCII letters, + digits and dashes. The label of the VPC subnet. + type: string + linodes: + description: A list of Linode IDs that added to this subnet. + items: + properties: + id: + description: The ID of the VPC Subnet. + type: number + interfaces: + items: + properties: + active: + type: boolean + id: + description: The ID of the VPC Subnet. + type: number + type: object + type: array + type: object + type: array + updated: + description: The date and time when the VPC was last updated. + The date and time when the VPC Subnet was updated. + type: string + vpcId: + description: The id of the parent VPC for this VPC Subnet. The + id of the parent VPC for this VPC Subnet + type: number + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time this condition + transitioned from one status to another. + format: date-time + type: string + message: + description: A Message containing details about this condition's + last transition from one status to another, if any. + type: string + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: Type of this condition. At most one of each condition + type may apply to a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/package/crds/vpc.linode.upbound.io_vpcs.yaml b/package/crds/vpc.linode.upbound.io_vpcs.yaml new file mode 100644 index 0000000..deae1bc --- /dev/null +++ b/package/crds/vpc.linode.upbound.io_vpcs.yaml @@ -0,0 +1,348 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + name: vpcs.vpc.linode.upbound.io +spec: + group: vpc.linode.upbound.io + names: + categories: + - crossplane + - managed + - linode + kind: VPC + listKind: VPCList + plural: vpcs + singular: vpc + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: VPC is the Schema for the VPCs API. Manages a Linode VPC. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: VPCSpec defines the desired state of VPC + properties: + deletionPolicy: + default: Delete + description: 'DeletionPolicy specifies what will happen to the underlying + external when this managed resource is deleted - either "Delete" + or "Orphan" the external resource. This field is planned to be deprecated + in favor of the ManagementPolicies field in a future release. Currently, + both could be set independently and non-default values would be + honored if the feature flag is enabled. See the design doc for more + information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223' + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + description: + description: The user-defined description of this VPC. The user-defined + description of this VPC. + type: string + label: + description: The label of the VPC. This field can only contain + ASCII letters, digits and dashes. The label of the VPC. Only + contains ascii letters, digits and dashes + type: string + region: + description: The region of the VPC. The region of the VPC. + type: string + type: object + initProvider: + description: THIS IS A BETA FIELD. It will be honored unless the Management + Policies feature flag is disabled. InitProvider holds the same fields + as ForProvider, with the exception of Identifier and other resource + reference fields. The fields that are in InitProvider are merged + into ForProvider when the resource is created. The same fields are + also added to the terraform ignore_changes hook, to avoid updating + them after creation. This is useful for fields that are required + on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, + like an autoscaler. + properties: + description: + description: The user-defined description of this VPC. The user-defined + description of this VPC. + type: string + label: + description: The label of the VPC. This field can only contain + ASCII letters, digits and dashes. The label of the VPC. Only + contains ascii letters, digits and dashes + type: string + region: + description: The region of the VPC. The region of the VPC. + type: string + type: object + managementPolicies: + default: + - '*' + description: 'THIS IS A BETA FIELD. It is on by default but can be + opted out through a Crossplane feature flag. ManagementPolicies + specify the array of actions Crossplane is allowed to take on the + managed and external resources. This field is planned to replace + the DeletionPolicy field in a future release. Currently, both could + be set independently and non-default values would be honored if + the feature flag is enabled. If both are custom, the DeletionPolicy + field will be ignored. See the design doc for more information: + https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md' + items: + description: A ManagementAction represents an action that the Crossplane + controllers can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: ProviderConfigReference specifies how the provider that + will be used to create, observe, update, and delete this managed + resource should be configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of this + reference is required. The default is 'Required', which + means the reconcile will fail if the reference cannot be + resolved. 'Optional' means this reference will be a no-op + if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will attempt + to resolve the reference only when the corresponding field + is not present. Use 'Always' to resolve the reference on + every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: PublishConnectionDetailsTo specifies the connection secret + config which contains a name, metadata and a reference to secret + store config to which any connection details for this managed resource + should be written. Connection details frequently include the endpoint, + username, and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: SecretStoreConfigRef specifies which secret store + config should be used for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: Resolution specifies whether resolution of + this reference is required. The default is 'Required', + which means the reconcile will fail if the reference + cannot be resolved. 'Optional' means this reference + will be a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: Resolve specifies when this reference should + be resolved. The default is 'IfNotPresent', which will + attempt to resolve the reference only when the corresponding + field is not present. Use 'Always' to resolve the reference + on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: Annotations are the annotations to be added to + connection secret. - For Kubernetes secrets, this will be + used as "metadata.annotations". - It is up to Secret Store + implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: Labels are the labels/tags to be added to connection + secret. - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store + types. + type: object + type: + description: Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: WriteConnectionSecretToReference specifies the namespace + and name of a Secret to which any connection details for this managed + resource should be written. Connection details frequently include + the endpoint, username, and password required to connect to the + managed resource. This field is planned to be replaced in a future + release in favor of PublishConnectionDetailsTo. Currently, both + could be set independently and connection details would be published + to both without affecting each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + x-kubernetes-validations: + - message: spec.forProvider.label is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.label) + || (has(self.initProvider) && has(self.initProvider.label))' + - message: spec.forProvider.region is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.region) + || (has(self.initProvider) && has(self.initProvider.region))' + status: + description: VPCStatus defines the observed state of VPC. + properties: + atProvider: + properties: + created: + description: The date and time when the VPC was created. The date + and time when the VPC was created. + type: string + description: + description: The user-defined description of this VPC. The user-defined + description of this VPC. + type: string + id: + description: The ID of the VPC. + type: string + label: + description: The label of the VPC. This field can only contain + ASCII letters, digits and dashes. The label of the VPC. Only + contains ascii letters, digits and dashes + type: string + region: + description: The region of the VPC. The region of the VPC. + type: string + updated: + description: The date and time when the VPC was last updated. + The date and time when the VPC was updated. + type: string + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time this condition + transitioned from one status to another. + format: date-time + type: string + message: + description: A Message containing details about this condition's + last transition from one status to another, if any. + type: string + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: Type of this condition. At most one of each condition + type may apply to a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {}