diff --git a/apis/null/v1alpha1/zz_generated.conversion_hubs.go b/apis/null/v1alpha1/zz_generated.conversion_hubs.go deleted file mode 100755 index a5edb4b..0000000 --- a/apis/null/v1alpha1/zz_generated.conversion_hubs.go +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by upjet. DO NOT EDIT. - -package v1alpha1 - -// Hub marks this type as a conversion hub. -func (tr *Resource) Hub() {} diff --git a/apis/null/v1alpha1/zz_generated.deepcopy.go b/apis/null/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index 2f2ce27..0000000 --- a/apis/null/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,205 +0,0 @@ -//go:build !ignore_autogenerated - -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by controller-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Resource) DeepCopyInto(out *Resource) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Resource. -func (in *Resource) DeepCopy() *Resource { - if in == nil { - return nil - } - out := new(Resource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Resource) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceInitParameters) DeepCopyInto(out *ResourceInitParameters) { - *out = *in - if in.Triggers != nil { - in, out := &in.Triggers, &out.Triggers - *out = make(map[string]*string, len(*in)) - for key, val := range *in { - var outVal *string - if val == nil { - (*out)[key] = nil - } else { - inVal := (*in)[key] - in, out := &inVal, &outVal - *out = new(string) - **out = **in - } - (*out)[key] = outVal - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceInitParameters. -func (in *ResourceInitParameters) DeepCopy() *ResourceInitParameters { - if in == nil { - return nil - } - out := new(ResourceInitParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceList) DeepCopyInto(out *ResourceList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Resource, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceList. -func (in *ResourceList) DeepCopy() *ResourceList { - if in == nil { - return nil - } - out := new(ResourceList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ResourceList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceObservation) DeepCopyInto(out *ResourceObservation) { - *out = *in - if in.ID != nil { - in, out := &in.ID, &out.ID - *out = new(string) - **out = **in - } - if in.Triggers != nil { - in, out := &in.Triggers, &out.Triggers - *out = make(map[string]*string, len(*in)) - for key, val := range *in { - var outVal *string - if val == nil { - (*out)[key] = nil - } else { - inVal := (*in)[key] - in, out := &inVal, &outVal - *out = new(string) - **out = **in - } - (*out)[key] = outVal - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceObservation. -func (in *ResourceObservation) DeepCopy() *ResourceObservation { - if in == nil { - return nil - } - out := new(ResourceObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceParameters) DeepCopyInto(out *ResourceParameters) { - *out = *in - if in.Triggers != nil { - in, out := &in.Triggers, &out.Triggers - *out = make(map[string]*string, len(*in)) - for key, val := range *in { - var outVal *string - if val == nil { - (*out)[key] = nil - } else { - inVal := (*in)[key] - in, out := &inVal, &outVal - *out = new(string) - **out = **in - } - (*out)[key] = outVal - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceParameters. -func (in *ResourceParameters) DeepCopy() *ResourceParameters { - if in == nil { - return nil - } - out := new(ResourceParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceSpec) DeepCopyInto(out *ResourceSpec) { - *out = *in - in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) - in.ForProvider.DeepCopyInto(&out.ForProvider) - in.InitProvider.DeepCopyInto(&out.InitProvider) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceSpec. -func (in *ResourceSpec) DeepCopy() *ResourceSpec { - if in == nil { - return nil - } - out := new(ResourceSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceStatus) DeepCopyInto(out *ResourceStatus) { - *out = *in - in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) - in.AtProvider.DeepCopyInto(&out.AtProvider) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceStatus. -func (in *ResourceStatus) DeepCopy() *ResourceStatus { - if in == nil { - return nil - } - out := new(ResourceStatus) - in.DeepCopyInto(out) - return out -} diff --git a/apis/null/v1alpha1/zz_groupversion_info.go b/apis/null/v1alpha1/zz_groupversion_info.go deleted file mode 100755 index 8343a4e..0000000 --- a/apis/null/v1alpha1/zz_groupversion_info.go +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by upjet. DO NOT EDIT. - -// +kubebuilder:object:generate=true -// +groupName=null.template.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 = "null.template.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/null/v1alpha1/zz_resource_terraformed.go b/apis/null/v1alpha1/zz_resource_terraformed.go deleted file mode 100755 index fa3cf05..0000000 --- a/apis/null/v1alpha1/zz_resource_terraformed.go +++ /dev/null @@ -1,129 +0,0 @@ -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// 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 Resource -func (mg *Resource) GetTerraformResourceType() string { - return "null_resource" -} - -// GetConnectionDetailsMapping for this Resource -func (tr *Resource) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this Resource -func (tr *Resource) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Resource -func (tr *Resource) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Resource -func (tr *Resource) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Resource -func (tr *Resource) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Resource -func (tr *Resource) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// GetInitParameters of this Resource -func (tr *Resource) GetInitParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.InitProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// GetInitParameters of this Resource -func (tr *Resource) 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 Resource using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Resource) LateInitialize(attrs []byte) (bool, error) { - params := &ResourceParameters{} - if err := json.TFParser.Unmarshal(attrs, params); err != nil { - return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") - } - opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} - - li := resource.NewGenericLateInitializer(opts...) - return li.LateInitialize(&tr.Spec.ForProvider, params) -} - -// GetTerraformSchemaVersion returns the associated Terraform schema version -func (tr *Resource) GetTerraformSchemaVersion() int { - return 0 -} diff --git a/apis/null/v1alpha1/zz_resource_types.go b/apis/null/v1alpha1/zz_resource_types.go deleted file mode 100755 index ccc4fcb..0000000 --- a/apis/null/v1alpha1/zz_resource_types.go +++ /dev/null @@ -1,103 +0,0 @@ -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by upjet. DO NOT EDIT. - -package v1alpha1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - - v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" -) - -type ResourceInitParameters struct { - - // running any associated provisioners. - // A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners. - // +mapType=granular - Triggers map[string]*string `json:"triggers,omitempty" tf:"triggers,omitempty"` -} - -type ResourceObservation struct { - - // (String) This is set to a random value at create time. - ID *string `json:"id,omitempty" tf:"id,omitempty"` - - // running any associated provisioners. - // A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners. - // +mapType=granular - Triggers map[string]*string `json:"triggers,omitempty" tf:"triggers,omitempty"` -} - -type ResourceParameters struct { - - // running any associated provisioners. - // A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners. - // +kubebuilder:validation:Optional - // +mapType=granular - Triggers map[string]*string `json:"triggers,omitempty" tf:"triggers,omitempty"` -} - -// ResourceSpec defines the desired state of Resource -type ResourceSpec struct { - v1.ResourceSpec `json:",inline"` - ForProvider ResourceParameters `json:"forProvider"` - // THIS IS A BETA FIELD. It will be honored - // unless the Management Policies feature flag is disabled. - // InitProvider holds the same fields as ForProvider, with the exception - // of Identifier and other resource reference fields. The fields that are - // in InitProvider are merged into ForProvider when the resource is created. - // The same fields are also added to the terraform ignore_changes hook, to - // avoid updating them after creation. This is useful for fields that are - // required on creation, but we do not desire to update them after creation, - // for example because of an external controller is managing them, like an - // autoscaler. - InitProvider ResourceInitParameters `json:"initProvider,omitempty"` -} - -// ResourceStatus defines the observed state of Resource. -type ResourceStatus struct { - v1.ResourceStatus `json:",inline"` - AtProvider ResourceObservation `json:"atProvider,omitempty"` -} - -// +kubebuilder:object:root=true -// +kubebuilder:subresource:status -// +kubebuilder:storageversion - -// Resource is the Schema for the Resources API. The null_resource resource implements the standard resource lifecycle but takes no further action.hashicorp. The triggers argument allows specifying an arbitrary set of values that, when changed, will cause the resource to be replaced. -// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" -// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].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,template} -type Resource struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ResourceSpec `json:"spec"` - Status ResourceStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true - -// ResourceList contains a list of Resources -type ResourceList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []Resource `json:"items"` -} - -// Repository type metadata. -var ( - Resource_Kind = "Resource" - Resource_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: Resource_Kind}.String() - Resource_KindAPIVersion = Resource_Kind + "." + CRDGroupVersion.String() - Resource_GroupVersionKind = CRDGroupVersion.WithKind(Resource_Kind) -) - -func init() { - SchemeBuilder.Register(&Resource{}, &ResourceList{}) -} diff --git a/apis/v1alpha1/zz_generated.deepcopy.go b/apis/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index d22189d..0000000 --- a/apis/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,104 +0,0 @@ -//go:build !ignore_autogenerated - -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by controller-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StoreConfig) DeepCopyInto(out *StoreConfig) { - *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 StoreConfig. -func (in *StoreConfig) DeepCopy() *StoreConfig { - if in == nil { - return nil - } - out := new(StoreConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *StoreConfig) 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 *StoreConfigList) DeepCopyInto(out *StoreConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]StoreConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StoreConfigList. -func (in *StoreConfigList) DeepCopy() *StoreConfigList { - if in == nil { - return nil - } - out := new(StoreConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *StoreConfigList) 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 *StoreConfigSpec) DeepCopyInto(out *StoreConfigSpec) { - *out = *in - in.SecretStoreConfig.DeepCopyInto(&out.SecretStoreConfig) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StoreConfigSpec. -func (in *StoreConfigSpec) DeepCopy() *StoreConfigSpec { - if in == nil { - return nil - } - out := new(StoreConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StoreConfigStatus) DeepCopyInto(out *StoreConfigStatus) { - *out = *in - in.ConditionedStatus.DeepCopyInto(&out.ConditionedStatus) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StoreConfigStatus. -func (in *StoreConfigStatus) DeepCopy() *StoreConfigStatus { - if in == nil { - return nil - } - out := new(StoreConfigStatus) - in.DeepCopyInto(out) - return out -} diff --git a/apis/v1beta1/zz_generated.deepcopy.go b/apis/v1beta1/zz_generated.deepcopy.go deleted file mode 100644 index 40fe57c..0000000 --- a/apis/v1beta1/zz_generated.deepcopy.go +++ /dev/null @@ -1,178 +0,0 @@ -//go:build !ignore_autogenerated - -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by controller-gen. DO NOT EDIT. - -package v1beta1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ProviderConfig) DeepCopyInto(out *ProviderConfig) { - *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 ProviderConfig. -func (in *ProviderConfig) DeepCopy() *ProviderConfig { - if in == nil { - return nil - } - out := new(ProviderConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ProviderConfig) 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 *ProviderConfigList) DeepCopyInto(out *ProviderConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ProviderConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigList. -func (in *ProviderConfigList) DeepCopy() *ProviderConfigList { - if in == nil { - return nil - } - out := new(ProviderConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ProviderConfigList) 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 *ProviderConfigSpec) DeepCopyInto(out *ProviderConfigSpec) { - *out = *in - in.Credentials.DeepCopyInto(&out.Credentials) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigSpec. -func (in *ProviderConfigSpec) DeepCopy() *ProviderConfigSpec { - if in == nil { - return nil - } - out := new(ProviderConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ProviderConfigStatus) DeepCopyInto(out *ProviderConfigStatus) { - *out = *in - in.ProviderConfigStatus.DeepCopyInto(&out.ProviderConfigStatus) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigStatus. -func (in *ProviderConfigStatus) DeepCopy() *ProviderConfigStatus { - if in == nil { - return nil - } - out := new(ProviderConfigStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ProviderConfigUsage) DeepCopyInto(out *ProviderConfigUsage) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.ProviderConfigUsage.DeepCopyInto(&out.ProviderConfigUsage) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigUsage. -func (in *ProviderConfigUsage) DeepCopy() *ProviderConfigUsage { - if in == nil { - return nil - } - out := new(ProviderConfigUsage) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ProviderConfigUsage) 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 *ProviderConfigUsageList) DeepCopyInto(out *ProviderConfigUsageList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ProviderConfigUsage, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigUsageList. -func (in *ProviderConfigUsageList) DeepCopy() *ProviderConfigUsageList { - if in == nil { - return nil - } - out := new(ProviderConfigUsageList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ProviderConfigUsageList) 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 *ProviderCredentials) DeepCopyInto(out *ProviderCredentials) { - *out = *in - in.CommonCredentialSelectors.DeepCopyInto(&out.CommonCredentialSelectors) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderCredentials. -func (in *ProviderCredentials) DeepCopy() *ProviderCredentials { - if in == nil { - return nil - } - out := new(ProviderCredentials) - in.DeepCopyInto(out) - return out -} diff --git a/apis/v1beta1/zz_generated.pc.go b/apis/v1beta1/zz_generated.pc.go deleted file mode 100644 index 216387b..0000000 --- a/apis/v1beta1/zz_generated.pc.go +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by angryjet. DO NOT EDIT. - -package v1beta1 - -import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" - -// GetCondition of this ProviderConfig. -func (p *ProviderConfig) GetCondition(ct xpv1.ConditionType) xpv1.Condition { - return p.Status.GetCondition(ct) -} - -// GetUsers of this ProviderConfig. -func (p *ProviderConfig) GetUsers() int64 { - return p.Status.Users -} - -// SetConditions of this ProviderConfig. -func (p *ProviderConfig) SetConditions(c ...xpv1.Condition) { - p.Status.SetConditions(c...) -} - -// SetUsers of this ProviderConfig. -func (p *ProviderConfig) SetUsers(i int64) { - p.Status.Users = i -} diff --git a/apis/v1beta1/zz_generated.pcu.go b/apis/v1beta1/zz_generated.pcu.go deleted file mode 100644 index b8a6d3d..0000000 --- a/apis/v1beta1/zz_generated.pcu.go +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by angryjet. DO NOT EDIT. - -package v1beta1 - -import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" - -// GetProviderConfigReference of this ProviderConfigUsage. -func (p *ProviderConfigUsage) GetProviderConfigReference() xpv1.Reference { - return p.ProviderConfigReference -} - -// GetResourceReference of this ProviderConfigUsage. -func (p *ProviderConfigUsage) GetResourceReference() xpv1.TypedReference { - return p.ResourceReference -} - -// SetProviderConfigReference of this ProviderConfigUsage. -func (p *ProviderConfigUsage) SetProviderConfigReference(r xpv1.Reference) { - p.ProviderConfigReference = r -} - -// SetResourceReference of this ProviderConfigUsage. -func (p *ProviderConfigUsage) SetResourceReference(r xpv1.TypedReference) { - p.ResourceReference = r -} diff --git a/apis/v1beta1/zz_generated.pculist.go b/apis/v1beta1/zz_generated.pculist.go deleted file mode 100644 index 87925c4..0000000 --- a/apis/v1beta1/zz_generated.pculist.go +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by angryjet. DO NOT EDIT. - -package v1beta1 - -import resource "github.com/crossplane/crossplane-runtime/pkg/resource" - -// GetItems of this ProviderConfigUsageList. -func (p *ProviderConfigUsageList) GetItems() []resource.ProviderConfigUsage { - items := make([]resource.ProviderConfigUsage, len(p.Items)) - for i := range p.Items { - items[i] = &p.Items[i] - } - return items -} diff --git a/apis/zz_register.go b/apis/zz_register.go deleted file mode 100755 index ad87aab..0000000 --- a/apis/zz_register.go +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by upjet. DO NOT EDIT. - -// Package apis contains Kubernetes API for the provider. -package apis - -import ( - "k8s.io/apimachinery/pkg/runtime" - - v1alpha1 "github.com/upbound/upjet-provider-template/apis/null/v1alpha1" - v1alpha1apis "github.com/upbound/upjet-provider-template/apis/v1alpha1" - v1beta1 "github.com/upbound/upjet-provider-template/apis/v1beta1" -) - -func init() { - // Register the types with the Scheme so the components can map objects to GroupVersionKinds and back - AddToSchemes = append(AddToSchemes, - v1alpha1.SchemeBuilder.AddToScheme, - v1alpha1apis.SchemeBuilder.AddToScheme, - v1beta1.SchemeBuilder.AddToScheme, - ) -} - -// AddToSchemes may be used to add all resources defined in the project to a Scheme -var AddToSchemes runtime.SchemeBuilder - -// AddToScheme adds all Resources to the Scheme -func AddToScheme(s *runtime.Scheme) error { - return AddToSchemes.AddToScheme(s) -} diff --git a/config/exoscale_block_storage_volume_snapshot/config.go b/config/exoscale_block_storage_volume_snapshot/config.go new file mode 100644 index 0000000..1fa4ba2 --- /dev/null +++ b/config/exoscale_block_storage_volume_snapshot/config.go @@ -0,0 +1,12 @@ +package exoscale_block_storage_volume_snapshot + +import "github.com/crossplane/upjet/pkg/config" + +// Configure configures individual resources by adding custom ResourceConfigurators. +func Configure(p *config.Provider) { + p.AddResourceConfigurator("exoscale_block_storage_volume_snapshot", func(r *config.Resource) { + // We need to override the default group that upjet generated for + // this resource, which would be "github" + r.ShortGroup = "exoscale_block_storage_volume_snapshot" + }) +} diff --git a/config/exoscale_block_storage_volume/config.go b/config/exoscale_iam_role/config.go similarity index 62% rename from config/exoscale_block_storage_volume/config.go rename to config/exoscale_iam_role/config.go index 6ad985f..03234dd 100644 --- a/config/exoscale_block_storage_volume/config.go +++ b/config/exoscale_iam_role/config.go @@ -1,12 +1,12 @@ -package exoscale_block_storage_volume +package exoscale_iam_role import "github.com/crossplane/upjet/pkg/config" // Configure configures individual resources by adding custom ResourceConfigurators. func Configure(p *config.Provider) { - p.AddResourceConfigurator("exoscale_block_storage_volume", func(r *config.Resource) { + p.AddResourceConfigurator("exoscale_iam_role", func(r *config.Resource) { // We need to override the default group that upjet generated for // this resource, which would be "github" - r.ShortGroup = "exoscale_block_storage_volume" + r.ShortGroup = "exoscale_iam_role" }) } diff --git a/config/external_name.go b/config/external_name.go index 4038823..70c09cb 100644 --- a/config/external_name.go +++ b/config/external_name.go @@ -11,7 +11,8 @@ import "github.com/crossplane/upjet/pkg/config" var ExternalNameConfigs = map[string]config.ExternalName{ // Import requires using a randomly generated ID from provider: nl-2e21sda //"null_resource": config.IdentifierFromProvider, - "exoscale_block_storage_volume": config.NameAsIdentifier, + "exoscale_iam_role": config.NameAsIdentifier, + // "exoscale_block_storage_volume_snapshot": config.NameAsIdentifier, } // ExternalNameConfigurations applies all external name configs listed in the diff --git a/config/provider-metadata.yaml b/config/provider-metadata.yaml index 34f77d3..a48a74b 100644 --- a/config/provider-metadata.yaml +++ b/config/provider-metadata.yaml @@ -1,40 +1,1518 @@ -name: hashicorp/null +name: exoscale/exoscale resources: - null_resource: + Exoscale Provider: subCategory: "" - description: The null_resource resource implements the standard resource lifecycle but takes no further action. On Terraform 1.4 and later, use the terraform_data resource type https://developer.hashicorp.com/terraform/language/resources/terraform-data instead. The triggers argument allows specifying an arbitrary set of values that, when changed, will cause the resource to be replaced. - name: null_resource - title: null_resource Resource - terraform-provider-null + description: The Exoscale provider can be used to manage infrastructure resources running on Exoscale. + name: Exoscale Provider + title: Exoscale Provider + argumentDocs: + delay: (Number, Deprecated) + environment: (String) + key: '/ EXOSCALE_API_KEY: Exoscale account API key' + secret: '/ EXOSCALE_API_SECRET: Exoscale account API secret' + timeout: ': Global async operations waiting time in seconds (default: 300)' + importStatements: [] + compute migration Guide: + subCategory: "" + description: Migrating compute and nic to a compute_instance + name: compute migration Guide + title: compute migration Guide + argumentDocs: + exoscale_compute.affinity_group_ids: must be renamed to anti_affinity_group_ids; + exoscale_compute.affinity_groups: is unsupported and must be replaced with affinity_group_ids (we recommend using exoscale_anti_affinity_group datasource for anti-affinity group name->id mapping); + exoscale_compute.display_name: must be renamed as name; + exoscale_compute.hostname: is deprecated (name is used instead) and should be removed; + exoscale_compute.ip4: is deprecated and should be removed; + exoscale_compute.key_pair: must be renamed to ssh_key; + exoscale_compute.keyboard: is deprecated and should be removed; + exoscale_compute.security_groups: is unsupported and must be replaced with security_group_ids (we recommend using exoscale_security_group datasource for security group name->id mapping); + exoscale_compute.size: must be replaced with type and format changed to . (check docs for details) + exoscale_compute.tags: must be renamed to labels; + exoscale_compute.template: is unsupported and must be replaced with template_id (we recommend using exoscale_template datasource for template name->id mapping); + exoscale_compute_instance: resource; + exoscale_network.display_text: must be renamed to description; + exoscale_network.network_offering: is deprecated and should be removed. + exoscale_network.tags: must be renamed to labels; + terraform state pull: and restored with terraform state push + importStatements: [] + exoscale_anti_affinity_group: + subCategory: "" + description: 'Manage Exoscale Anti-Affinity Groups https://community.exoscale.com/documentation/compute/anti-affinity-groups/. Corresponding data source: exoscaleantiaffinity_group ../data-sources/anti_affinity_group.md.' + name: exoscale_anti_affinity_group + title: exoscale_anti_affinity_group Resource - terraform-provider-exoscale + examples: + - name: my_anti_affinity_group + manifest: |- + { + "description": "Prevent compute instances to run on the same host", + "name": "my-anti-affinity-group" + } + argumentDocs: + create: (String) + delete: (String) + description: (String) ❗ A free-form text describing the group. + id: (String) The ID of this resource. + name: (String) ❗ The anti-affinity group name. + read: (String) + timeouts: (Block, Optional) (see below for nested schema) + importStatements: + - |- + # An existing anti-affinity group may be imported by ``: + + terraform import \ + exoscale_anti_affinity_group.my_anti_affinity_group \ + f81d4fae-7dec-11d0-a765-00a0c91e6bf6 + exoscale_anti_affinity_group Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale Anti-Affinity Groups https://community.exoscale.com/documentation/compute/anti-affinity-groups/ data. Corresponding resource: exoscaleantiaffinity_group ../resources/anti_affinity_group.md.' + name: exoscale_anti_affinity_group Data Source - terraform-provider-exoscale + title: exoscale_anti_affinity_group Data Source - terraform-provider-exoscale + argumentDocs: + id: (String) The anti-affinity group ID to match (conflicts with name). + instances: (Set of String) The list of attached exoscale_compute_instance (IDs). + name: (String) The group name to match (conflicts with id). + importStatements: [] + exoscale_block_storage_volume Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale Block Storage https://community.exoscale.com/documentation/block-storage/ Volume. Block Storage offers persistent externally attached volumes for your workloads. Corresponding resource: exoscaleblockstorage_volume ../resources/block_storage_volume.md.' + name: exoscale_block_storage_volume Data Source - terraform-provider-exoscale + title: exoscale_block_storage_volume Data Source - terraform-provider-exoscale + argumentDocs: + blocksize: (Number) Volume block size. + created_at: (String) Volume creation date. + id: (String) Volume ID to match. + instance: (Attributes) Volume attached instance. (see below for nested schema) + labels: (Map of String) Resource labels. + name: (String) Volume name. + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + size: (Number) Volume size in GB. + snapshots: (Attributes Set) Volume snapshots. (see below for nested schema) + state: (String) Volume state. + timeouts: (Block, Optional) (see below for nested schema) + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_block_storage_volume Resource - terraform-provider-exoscale: + subCategory: "" + description: Manage Exoscale Block Storage https://community.exoscale.com/documentation/block-storage/ Volume. Block Storage offers persistent externally attached volumes for your workloads. + name: exoscale_block_storage_volume Resource - terraform-provider-exoscale + title: exoscale_block_storage_volume Resource - terraform-provider-exoscale + argumentDocs: + blocksize: (Number) Volume block size. + created_at: (String) Volume creation date. + id: (String) The ID of this resource. + labels: (Map of String) Resource labels. + name: (String) Volume name. + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + size: (Number) Volume size in GB (default 10). If volume is attached, instance must be stopped to update this value. Volume can only grow, cannot be shrunk. + snapshot_target: (Attributes) Block storage snapshot to use when creating a volume. Read-only after creation. (see below for nested schema) + state: (String) Volume state. + timeouts: (Block, Optional) (see below for nested schema) + zone: (String) ❗ The Exoscale Zone name. + importStatements: [] + exoscale_block_storage_volume_snapshot Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale Block Storage https://community.exoscale.com/documentation/block-storage/ Snapshot. Block Storage offers persistent externally attached volumes for your workloads. Corresponding resource: exoscaleblockstorage_snapshot ../resources/block_storage_snapshot.md.' + name: exoscale_block_storage_volume_snapshot Data Source - terraform-provider-exoscale + title: exoscale_block_storage_volume_snapshot Data Source - terraform-provider-exoscale + argumentDocs: + created_at: (String) Snapshot creation date. + id: (String) Snapshot ID to match. + labels: (Map of String) Labels. + name: (String) Snapshot name. + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + size: (Number) Snapshot size in GB. + state: (String) Snapshot state. + timeouts: (Block, Optional) (see below for nested schema) + volume: (Attributes) Block Storage Volume. (see below for nested schema) + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_block_storage_volume_snapshot Resource - terraform-provider-exoscale: + subCategory: "" + description: Manage Exoscale Block Storage https://community.exoscale.com/documentation/block-storage/ Volume Snapshot. Block Storage offers persistent externally attached volumes for your workloads. + name: exoscale_block_storage_volume_snapshot Resource - terraform-provider-exoscale + title: exoscale_block_storage_volume_snapshot Resource - terraform-provider-exoscale + argumentDocs: + created_at: (String) Snapshot creation date. + id: (String) The ID of this resource. + labels: (Map of String) Resource labels. + name: (String) Volume snapshot name. + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + size: (Number) Snapshot size in GB. + state: (String) Snapshot state. + timeouts: (Block, Optional) (see below for nested schema) + volume: (Attributes) Volume from which to create a snapshot. (see below for nested schema) + zone: (String) ❗ The Exoscale Zone name. + importStatements: [] + exoscale_compute_instance: + subCategory: "" + description: 'Manage Exoscale Compute Instances https://community.exoscale.com/documentation/compute/. Corresponding data sources: exoscalecomputeinstance ../data-sources/compute_instance.md, exoscalecomputeinstance_list ../data-sources/compute_instance_list.md. After the creation, you can retrieve the password of an instance with Exoscale CLI https://github.com/exoscale/cli: exo compute instance reveal-password NAME.' + name: exoscale_compute_instance + title: exoscale_compute_instance Resource - terraform-provider-exoscale examples: - - name: cluster + - name: my_instance manifest: |- { - "connection": [ + "disk_size": 10, + "name": "my-instance", + "template_id": "${data.exoscale_template.my_template.id}", + "type": "standard.medium", + "zone": "ch-gva-2" + } + references: + template_id: data.exoscale_template.my_template.id + argumentDocs: + anti_affinity_group_ids: (Set of String) ❗ A list of exoscale_anti_affinity_group (IDs) to attach to the instance (may only be set at creation time). + block_storage_volume_ids: (Set of String) A list of exoscale_block_storage_volume (ID) to attach to the instance. + create: (String) + created_at: (String) The instance creation date. + delete: (String) + deploy_target_id: (String) ❗ A deploy target ID. + destroy_protected: '(Boolean) Mark the instance as protected, the Exoscale API will refuse to delete the instance until the protection is removed (boolean; default: false).' + disk_size: '(Number) The instance disk size (GiB; at least 10). Can not be decreased after creation. WARNING: updating this attribute stops/restarts the instance.' + elastic_ip_ids: (Set of String) A list of exoscale_elastic_ip (IDs) to attach to the instance. + id: (String) The ID of this resource. + ip_address: (String) The IPv4 address to request as static DHCP lease if the network interface is attached to a managed private network. + ipv6: '(Boolean) Enable IPv6 on the instance (boolean; default: false).' + ipv6_address: (String) The instance (main network interface) IPv6 address (if enabled). + labels: (Map of String) A map of key/value labels. + mac_address: (String) MAC address + name: (String) The compute instance name. + network_id: (String) The exoscale_private_network (ID) to attach to the instance. + network_interface: (Block Set) Private network interfaces (may be specified multiple times). Structure is documented below. (see below for nested schema) + private: '(Boolean) Whether the instance is private (no public IP addresses; default: false)' + private_network_ids: (Set of String, Deprecated) A list of private networks (IDs) attached to the instance. Please use the network_interface.*.network_id argument instead. + public_ip_address: (String) The instance (main network interface) IPv4 address. + read: (String) + reverse_dns: (String) Domain name for reverse DNS record. + security_group_ids: (Set of String) A list of exoscale_security_group (IDs) to attach to the instance. + ssh_key: (String) The exoscale_ssh_key (name) to authorize in the instance (may only be set at creation time). + state: '(String) The instance state (running or stopped; default: running).' + template_id: (String) ❗ The exoscale_template (ID) to use when creating the instance. + timeouts: (Block, Optional) (see below for nested schema) + type: '(String) The instance type (., e.g. standard.medium; use the Exoscale CLI - exo compute instance-type list - for the list of available types). WARNING: updating this attribute stops/restarts the instance.' + update: (String) + user_data: (String) cloud-init configuration. + zone: (String) ❗ The Exoscale Zone name. + importStatements: + - |- + # An existing compute instance may be imported by `@`: + + terraform import \ + exoscale_compute_instance.my_instance \ + f81d4fae-7dec-11d0-a765-00a0c91e6bf6@ch-gva-2 + exoscale_compute_instance Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale Compute Instances https://community.exoscale.com/documentation/compute/ data. Corresponding resource: exoscalecomputeinstance ../resources/compute_instance.md.' + name: exoscale_compute_instance Data Source - terraform-provider-exoscale + title: exoscale_compute_instance Data Source - terraform-provider-exoscale + argumentDocs: + anti_affinity_group_ids: (Set of String) The list of attached exoscale_anti_affinity_group (IDs). + created_at: (String) The compute instance creation date. + deploy_target_id: (String) A deploy target ID. + disk_size: (Number) The instance disk size (GiB). + elastic_ip_ids: (Set of String) The list of attached exoscale_elastic_ip (IDs). + id: (String) The compute instance ID to match (conflicts with name). + ipv6: (Boolean) Whether IPv6 is enabled on the instance. + ipv6_address: (String) The instance (main network interface) IPv6 address (if enabled). + labels: (Map of String) A map of key/value labels. + manager_id: (String) The instance manager ID, if any. + manager_type: (String) The instance manager type (instance pool, SKS node pool, etc.), if any. + name: (String) The instance name to match (conflicts with id). + private_network_ids: (Set of String) The list of attached exoscale_private_network (IDs). + public_ip_address: (String) The instance (main network interface) IPv4 address. + reverse_dns: (String) Domain name for reverse DNS record. + security_group_ids: (Set of String) The list of attached exoscale_security_group (IDs). + ssh_key: (String) The exoscale_ssh_key (name) authorized on the instance. + state: (String) The instance state. + template_id: (String) The instance exoscale_template ID. + type: (String) The instance type. + user_data: (String) The instance cloud-init configuration. + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_compute_instance_list Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'List Exoscale Compute Instances https://community.exoscale.com/documentation/compute/. Corresponding resource: exoscalecomputeinstance ../resources/compute_instance.md.' + name: exoscale_compute_instance_list Data Source - terraform-provider-exoscale + title: exoscale_compute_instance_list Data Source - terraform-provider-exoscale + argumentDocs: + anti_affinity_group_ids: (Set of String) + created_at: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + deploy_target_id: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + disk_size: (Number) Match against this int + elastic_ip_ids: (Set of String) + id: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + instances: (List of Object) The list of exoscale_compute_instance. (see below for nested schema) + ipv6: (Boolean) Match against this bool + ipv6_address: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + labels: (Map of String) Match against key/values. Keys are matched exactly, while values may be matched as a regex if you supply a string that begins and ends with "/" + manager_id: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + manager_type: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + name: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + private_network_ids: (Set of String) + public_ip_address: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + reverse_dns: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + security_group_ids: (Set of String) + ssh_key: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + state: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + template_id: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + type: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + user_data: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_database: + subCategory: "" + description: Manage Exoscale Database Services (DBaaS) https://community.exoscale.com/documentation/dbaas/. + name: exoscale_database + title: exoscale_database Resource - terraform-provider-exoscale + examples: + - name: my_database + manifest: |- + { + "maintenance_dow": "sunday", + "maintenance_time": "23:00:00", + "name": "my-database", + "pg": [ { - "host": "${element(aws_instance.cluster[*].public_ip, 0)}" + "backup_schedule": "04:00", + "ip_filter": [ + "1.2.3.4/32", + "5.6.7.8/32" + ], + "pg_settings": "${jsonencode({\n timezone : \"Europe/Zurich\"\n })}", + "version": "13" } ], - "provisioner": { - "remote-exec": [ - { - "inline": [ - "bootstrap-cluster.sh ${join(\" \",\n aws_instance.cluster[*].private_ip)}" - ] + "plan": "startup-4", + "termination_protection": true, + "type": "pg", + "zone": "ch-gva-2" + } + argumentDocs: + admin_password: (String, Sensitive) A custom administrator account password (may only be set at creation time). + admin_username: (String) A custom administrator account username (may only be set at creation time). + backup_schedule: (String) The automated backup schedule (HH:MM). + ca_certificate: (String) CA Certificate required to reach a DBaaS service through a TLS-protected connection. + create: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + created_at: (String) The creation date of the database service. + dashboards: (Block, Optional) OpenSearch Dashboards settings (see below for nested schema) + delete: (String) A string that can be parsed as a duration 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. + disk_size: (Number) The disk size of the database service. + enable_cert_auth: (Boolean) Enable certificate-based authentication method. + enable_kafka_connect: (Boolean) Enable Kafka Connect. + enable_kafka_rest: (Boolean) Enable Kafka REST. + enable_sasl_auth: (Boolean) Enable SASL-based authentication method. + enable_schema_registry: (Boolean) Enable Schema Registry. + enabled: '(Boolean) Enable or disable OpenSearch Dashboards (default: true).' + fork_from_service: (String) ❗ Service name + grafana: (Block, Optional) grafana database service type specific arguments. Structure is documented below. (see below for nested schema) + grafana_settings: (String) Grafana configuration settings in JSON format (exo dbaas type show grafana --settings=grafana for reference). + id: (String) The ID of this resource. + index_pattern: '(Block List) (can be used multiple times) Allows you to create glob style patterns and set a max number of indexes matching this pattern you want to keep. Creating indexes exceeding this value will cause the oldest one to get deleted. You could for example create a pattern looking like ''logs.?'' and then create index logs.1, logs.2 etc, it will delete logs.1 once you create logs.6. Do note ''logs.?'' does not apply to logs.10. Note: Setting max_index_count to 0 will do nothing and the pattern gets ignored. (see below for nested schema)' + index_template: (Block, Optional) Template settings for all new indexes (see below for nested schema) + ip_filter: (Set of String) A list of CIDR blocks to allow incoming connections from. + kafka: (Block, Optional) kafka database service type specific arguments. Structure is documented below. (see below for nested schema) + kafka_connect_settings: (String) Kafka Connect configuration settings in JSON format (exo dbaas type show kafka --settings=kafka-connect for reference). + kafka_rest_settings: (String) Kafka REST configuration settings in JSON format (exo dbaas type show kafka --settings=kafka-rest for reference). + kafka_settings: (String) Kafka configuration settings in JSON format (exo dbaas type show kafka --settings=kafka for reference). + keep_index_refresh_interval: (Boolean) Aiven automation resets index.refresh_interval to default value for every index to be sure that indices are always visible to search. If it doesn't fit your case, you can disable this by setting up this flag to true. + maintenance_dow: (String) The day of week to perform the automated database service maintenance (never, monday, tuesday, wednesday, thursday, friday, saturday, sunday). + maintenance_time: (String) The time of day to perform the automated database service maintenance (HH:MM:SS) + mapping_nested_objects_limit: (Number) The maximum number of nested JSON objects that a single document can contain across all nested types. This limit helps to prevent out of memory errors when a document contains too many nested objects. (Default is 10000. Minimum value is 0, maximum value is 100000.) + max_index_count: (Number) Maximum number of indexes to keep (Minimum value is 0) + max_old_space_size: '(Number) Limits the maximum amount of memory (in MiB) the OpenSearch Dashboards process can use. This sets the max_old_space_size option of the nodejs running the OpenSearch Dashboards. Note: the memory reserved by OpenSearch Dashboards is not available for OpenSearch. (default: 128).' + mysql: (Block, Optional) mysql database service type specific arguments. Structure is documented below. (see below for nested schema) + mysql_settings: (String) MySQL configuration settings in JSON format (exo dbaas type show mysql --settings=mysql for reference). + name: (String) ❗ The name of the database service. + node_cpus: (Number) The number of CPUs of the database service. + node_memory: (Number) The amount of memory of the database service. + nodes: (Number) The number of nodes of the database service. + number_of_replicas: (Number) The number of replicas each primary shard has. (Minimum value is 0, maximum value is 29) + number_of_shards: (Number) The number of primary shards that an index should have. (Minimum value is 1, maximum value is 1024.) + opensearch: (Block, Optional) opensearch database service type specific arguments. Structure is documented below. (see below for nested schema) + pattern: (String) fnmatch pattern + pg: (Block, Optional) pg database service type specific arguments. Structure is documented below. (see below for nested schema) + pg_settings: (String) PostgreSQL configuration settings in JSON format (exo dbaas type show pg --settings=pg for reference). + pgbouncer_settings: (String) PgBouncer configuration settings in JSON format (exo dbaas type show pg --settings=pgbouncer for reference). + pglookout_settings: (String) pglookout configuration settings in JSON format (exo dbaas type show pg --settings=pglookout for reference). + plan: (String) The plan of the database service (use the Exoscale CLI - exo dbaas type show --plans - for reference). + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + recovery_backup_name: (String) ❗ Name of a backup to recover from + redis: (Block, Optional) redis database service type specific arguments. Structure is documented below. (see below for nested schema) + redis_settings: (String) Redis configuration settings in JSON format (exo dbaas type show redis --settings=redis for reference). + request_timeout: '(Number) Timeout in milliseconds for requests made by OpenSearch Dashboards towards OpenSearch (default: 30000)' + schema_registry_settings: (String) Schema Registry configuration settings in JSON format (exo dbaas type show kafka --settings=schema-registry for reference) + settings: '(String) OpenSearch-specific settings, in json. e.g.jsonencode({thread_pool_search_size: 64}). Use exo x get-dbaas-settings-opensearch to get a list of available settings.' + sorting_algorithm: (String) alphabetical or creation_date. + state: (String) The current state of the database service. + termination_protection: (Boolean) The database service protection boolean flag against termination/power-off. + timeouts: (Block, Optional) (see below for nested schema) + type: (String) ❗ The type of the database service (kafka, mysql, opensearch, pg, redis, grafana). + update: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + updated_at: (String) The date of the latest database service update. + version: (String) Kafka major version (exo dbaas type show kafka for reference; may only be set at creation time). + zone: (String) ❗ The Exoscale Zone name. + importStatements: + - |- + # An existing database service may be imported by `@`: + + terraform import \ + exoscale_database.my_database \ + my-database@ch-gva-2 + exoscale_database_uri Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale Database https://community.exoscale.com/documentation/dbaas/ connection URI data. This data source returns database conection details of the default (admin) user only. URI parts are also available individually for convenience. Corresponding resource: exoscale_database ../resources/database.md.' + name: exoscale_database_uri Data Source - terraform-provider-exoscale + title: exoscale_database_uri Data Source - terraform-provider-exoscale + argumentDocs: + db_name: (String) Default database name + host: (String) Database service hostname + id: (String) The ID of this resource. + name: (String) Name of database service to match. + password: (String, Sensitive) Admin user password + port: (Number) Database service port + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + schema: (String) Database service connection schema + timeouts: (Block, Optional) (see below for nested schema) + type: (String) The type of the database service (kafka, mysql, opensearch, pg, redis). + uri: (String, Sensitive) Database service connection URI. + username: (String) Admin user username + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_domain: + subCategory: "" + description: Manage Exoscale DNS Domains. + name: exoscale_domain + title: exoscale_domain Resource - terraform-provider-exoscale + examples: + - name: my_domain + manifest: |- + { + "name": "my.domain" + } + argumentDocs: + auto_renew: (Boolean, Deprecated) Whether the DNS domain has automatic renewal enabled (boolean). + create: (String) + delete: (String) + expires_on: (String, Deprecated) The domain expiration date, if known. + id: (String) The ID of this resource. + name: (String) ❗ The DNS domain name. + read: (String) + state: (String, Deprecated) The domain state. + timeouts: (Block, Optional) (see below for nested schema) + token: (String, Deprecated) A security token that can be used as an alternative way to manage DNS domains via the Exoscale API. + importStatements: + - |- + terraform import \ + exoscale_domain.my_domain \ + 89083a5c-b648-474a-0000-0000000f67bd + exoscale_domain Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale DNS https://community.exoscale.com/documentation/dns/ Domains data. Corresponding resource: exoscale_domain ../resources/domain.md.' + name: exoscale_domain Data Source - terraform-provider-exoscale + title: exoscale_domain Data Source - terraform-provider-exoscale + argumentDocs: + id: (String) The ID of this resource. + name: (String) The DNS domain name to match. + importStatements: [] + exoscale_domain_record: + subCategory: "" + description: 'Manage Exoscale DNS https://community.exoscale.com/documentation/dns/ Domain Records. Corresponding data source: exoscaledomainrecord ../data-sources/domain_record.md.' + name: exoscale_domain_record + title: exoscale_domain_record Resource - terraform-provider-exoscale + examples: + - name: my_host + manifest: |- + { + "content": "1.2.3.4", + "domain": "${exoscale_domain.my_domain.id}", + "name": "my-host", + "record_type": "A" + } + references: + domain: exoscale_domain.my_domain.id + dependencies: + exoscale_domain.my_domain: |- + { + "name": "example.net" + } + - name: my_host_alias + manifest: |- + { + "content": "${exoscale_domain_record.my_host.hostname}", + "domain": "${exoscale_domain.my_domain.id}", + "name": "my-host-alias", + "record_type": "CNAME" + } + references: + content: exoscale_domain_record.my_host.hostname + domain: exoscale_domain.my_domain.id + dependencies: + exoscale_domain.my_domain: |- + { + "name": "example.net" + } + argumentDocs: + content: (String) The record value. + content_normalized: (String) The normalized value of the record + create: (String) + delete: (String) + domain: (String) ❗ The parent exoscale_domain to attach the record to. + hostname: (String) The record Fully Qualified Domain Name (FQDN). Useful for aliasing A/AAAA records with CNAME. + id: (String) The ID of this resource. + name: (String) The record name, Leave blank ("") to create a root record (similar to using @ in a DNS zone file). + prio: (Number) The record priority (for types that support it; minimum 0). + read: (String) + record_type: (String) ❗ The record type (A, AAAA, ALIAS, CAA, CNAME, HINFO, MX, NAPTR, NS, POOL, SPF, SRV, SSHFP, TXT, URL). + timeouts: (Block, Optional) (see below for nested schema) + ttl: '(Number) The record TTL (seconds; minimum 0; default: 3600).' + update: (String) + importStatements: + - |- + # An existing DNS domain record may be imported by ``: + + terraform import \ + exoscale_domain_record.my_host \ + f81d4fae-7dec-11d0-a765-00a0c91e6bf6 + exoscale_domain_record Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale DNS https://community.exoscale.com/documentation/dns/ Domain Records data. Corresponding resource: exoscaledomainrecord ../resources/domain_record.md.' + name: exoscale_domain_record Data Source - terraform-provider-exoscale + title: exoscale_domain_record Data Source - terraform-provider-exoscale + argumentDocs: + content: (String) + content_regex: (String) A regular expression to match the record content. + domain: (String) The exoscale_domain name to match. + filter: '(Block List, Min: 1, Max: 1) Filter to apply when looking up domain records. (see below for nested schema)' + id: (String) The ID of this resource. + name: (String) The domain record name to match. + prio: (Number) + record_type: (String) The record type to match. + records: (List of Object) The list of matching records. Structure is documented below. (see below for nested schema) + ttl: (Number) + importStatements: [] + exoscale_elastic_ip: + subCategory: "" + description: Manage Exoscale Elastic IPs (EIP). + name: exoscale_elastic_ip + title: exoscale_elastic_ip Resource - terraform-provider-exoscale + examples: + - name: my_elastic_ip + manifest: |- + { + "zone": "ch-gva-2" + } + - name: my_managed_elastic_ip + manifest: |- + { + "address_family": "inet6", + "healthcheck": [ + { + "interval": 5, + "mode": "https", + "port": 443, + "strikes_fail": 3, + "strikes_ok": 2, + "timeout": 3, + "tls_sni": "example.net", + "uri": "/health" + } + ], + "reverse_dns": "example.net", + "zone": "ch-gva-2" + } + argumentDocs: + address_family: '(String) ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).' + cidr: (String) The Elastic IP (EIP) CIDR. + create: (String) + delete: (String) + description: (String) A free-form text describing the Elastic IP (EIP). + healthcheck: '(Block List, Max: 1) Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP. (see below for nested schema)' + id: (String) The ID of this resource. + interval: '(Number) The healthcheck interval (seconds; must be between 5 and 300; default: 10).' + ip_address: (String) The Elastic IP (EIP) IPv4 or IPv6 address. + labels: (Map of String) A map of key/value labels. + mode: (String) The healthcheck mode (tcp, http or https; may only be set at creation time). + port: (Number) The healthcheck target port (must be between 1 and 65535). + read: (String) + reverse_dns: (String) Domain name for reverse DNS record. + strikes_fail: '(Number) The number of failed healthcheck attempts before considering the target unhealthy (must be between 1 and 20; default: 2).' + strikes_ok: '(Number) The number of successful healthcheck attempts before considering the target healthy (must be between 1 and 20; default: 3).' + timeout: '(Number) The time before considering a healthcheck probing failed (seconds; must be between 2 and 60; default: 3).' + timeouts: (Block, Optional) (see below for nested schema) + tls_skip_verify: '(Boolean) Disable TLS certificate verification for healthcheck in https mode (boolean; default: false).' + tls_sni: (String) The healthcheck server name to present with SNI in https mode. + update: (String) + uri: (String) The healthcheck target URI (required in http(s) modes). + zone: (String) ❗ The Exoscale Zone name. + importStatements: + - |- + terraform import \ + exoscale_elastic_ip.my_elastic_ip \ + f81d4fae-7dec-11d0-a765-00a0c91e6bf6@ch-gva-2 + exoscale_elastic_ip Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale Elastic IPs (EIP) https://community.exoscale.com/documentation/compute/eip/ data. Corresponding resource: exoscaleelasticip ../resources/elastic_ip.md.' + name: exoscale_elastic_ip Data Source - terraform-provider-exoscale + title: exoscale_elastic_ip Data Source - terraform-provider-exoscale + argumentDocs: + address_family: (String) The Elastic IP (EIP) address family (inet4 or inet6). + cidr: (String) The Elastic IP (EIP) CIDR. + description: (String) The Elastic IP (EIP) description. + healthcheck: (List of Object) The managed EIP healthcheck configuration. (see below for nested schema) + id: (String) The Elastic IP (EIP) ID to match (conflicts with ip_address and labels). + interval: (Number) + ip_address: (String) The EIP IPv4 or IPv6 address to match (conflicts with id and labels). + labels: (Map of String) The EIP labels to match (conflicts with ip_address and id). + mode: (String) + port: (Number) + reverse_dns: (String) Domain name for reverse DNS record. + strikes_fail: (Number) + strikes_ok: (Number) + timeout: (Number) + tls_skip_verify: (Boolean) + tls_sni: (String) + uri: (String) + zone: (String) The Exocale Zone name. + importStatements: [] + exoscale_iam_access_key: + subCategory: "" + description: Manage Exoscale IAM Access Keys + name: exoscale_iam_access_key + title: exoscale_iam_access_key Resource - terraform-provider-exoscale + examples: + - name: my_sos_access_key + manifest: |- + { + "name": "my-sos-access-key", + "operations": [ + "get-sos-object", + "list-sos-bucket" + ], + "resources": [ + "sos/bucket:my-bucket" + ] + } + - name: my_sks_access_key + manifest: |- + { + "name": "my-sks-access-key", + "tags": [ + "sks" + ] + } + argumentDocs: + create: (String) + delete: (String) + id: (String) The ID of this resource. + key: (String, Sensitive) The IAM access key (identifier). + name: (String) ❗ The IAM access key name. + operations: (Set of String) ❗ A list of API operations to restrict the key to. + read: (String) + resources: (Set of String) ❗ A list of API resources to restrict the key to (/:). + secret: (String, Sensitive) The key secret. + tags: (Set of String) ❗ A list of tags to restrict the key to. + tags_operations: (Set of String) + timeouts: (Block, Optional) (see below for nested schema) + importStatements: [] + exoscale_iam_api_key: + subCategory: "" + description: Manage Exoscale IAM API Keys + name: exoscale_iam_api_key + title: exoscale_iam_api_key Resource - terraform-provider-exoscale + examples: + - name: my_api_key + manifest: |- + { + "name": "my-api-key", + "role_id": "${exoscale_iam_role.my_role.id}" + } + references: + role_id: exoscale_iam_role.my_role.id + dependencies: + exoscale_iam_role.my_role: |- + { + "description": "Example role", + "editable": true, + "name": "my-role", + "policy": { + "default_service_strategy": "deny", + "services": { + "sos": { + "type": "allow" + } + } } - ] - }, - "triggers": { - "cluster_instance_ids": "${join(\",\", aws_instance.cluster[*].id)}" + } + argumentDocs: + id: (String) The ID of this resource. + key: (String) The IAM API Key to match. + name: (String) ❗ IAM API Key name. + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + role_id: (String) ❗ IAM API role ID. + secret: (String, Sensitive) Secret for the IAM API Key. + timeouts: (Block, Optional) (see below for nested schema) + importStatements: [] + exoscale_iam_api_key Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale IAM https://community.exoscale.com/documentation/iam/ API Key. Corresponding resource: exoscaleiamrole ../resources/iam_api_key.md.' + name: exoscale_iam_api_key Data Source - terraform-provider-exoscale + title: exoscale_iam_api_key Data Source - terraform-provider-exoscale + argumentDocs: + id: (String) The ID of this resource. + key: (String) The IAM API Key to match. + name: (String) IAM API Key name. + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + role_id: (String) IAM API Key role ID. + timeouts: (Block, Optional) (see below for nested schema) + importStatements: [] + exoscale_iam_org_policy: + subCategory: "" + description: Manage Exoscale IAM Org Policy + name: exoscale_iam_org_policy + title: exoscale_iam_org_policy Resource - terraform-provider-exoscale + examples: + - name: org_policy + manifest: |- + { + "default_service_strategy": "allow", + "services": { + "sos": { + "type": "deny" + } } } + argumentDocs: + action: (String) IAM policy rule action (allow or deny). + default_service_strategy: (String) Default service strategy (allow or deny). + expression: (String) IAM policy rule expression. + id: (String) The ID of this resource. + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + resources: (List of String, Deprecated) + rules: (Attributes List) List of IAM service rules (if type is rules). (see below for nested schema) + services: (Attributes Map) IAM policy services. (see below for nested schema) + timeouts: (Block, Optional) (see below for nested schema) + type: (String) Service type (rules, allow, or deny). + importStatements: [] + exoscale_iam_org_policy Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale IAM https://community.exoscale.com/documentation/iam/ Organization Policy. Corresponding resource: exoscaleiamorg_policy ../resources/iam_org_policy.md.' + name: exoscale_iam_org_policy Data Source - terraform-provider-exoscale + title: exoscale_iam_org_policy Data Source - terraform-provider-exoscale + argumentDocs: + action: (String) IAM policy rule action (allow or deny). + default_service_strategy: (String) Default service strategy (allow or deny). + expression: (String) IAM policy rule expression. + id: (String) The ID of this resource. + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + resources: (List of String, Deprecated) + rules: (Attributes List) List of IAM service rules (if type is rules). (see below for nested schema) + services: (Attributes Map) IAM policy services. (see below for nested schema) + timeouts: (Block, Optional) (see below for nested schema) + type: (String) Service type (rules, allow, or deny). + importStatements: [] + exoscale_iam_role Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale IAM https://community.exoscale.com/documentation/iam/ Role. Corresponding resource: exoscaleiamrole ../resources/iam_role.md.' + name: exoscale_iam_role Data Source - terraform-provider-exoscale + title: exoscale_iam_role Data Source - terraform-provider-exoscale + argumentDocs: + action: (String) IAM policy rule action (allow or deny). + default_service_strategy: (String) Default service strategy (allow or deny). + description: (String) A free-form text describing the IAM Role + editable: (Boolean) Defines if IAM Role Policy is editable or not. + expression: (String) IAM policy rule expression. + id: (String) The role ID to match (conflicts with name). + labels: (Map of String) IAM Role labels. + name: (String) the role name to match (conflicts with id). + permissions: (List of String) IAM Role permissions. + policy: (Attributes) IAM Policy. (see below for nested schema) + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + resources: (List of String, Deprecated) + rules: (Attributes List) List of IAM service rules (if type is rules). (see below for nested schema) + services: (Attributes Map) IAM policy services. (see below for nested schema) + timeouts: (Block, Optional) (see below for nested schema) + type: (String) Service type (rules, allow, or deny). + importStatements: [] + exoscale_iam_role Resource - terraform-provider-exoscale: + subCategory: "" + description: Manage Exoscale IAM https://community.exoscale.com/documentation/iam/ Role. + name: exoscale_iam_role Resource - terraform-provider-exoscale + title: exoscale_iam_role Resource - terraform-provider-exoscale + argumentDocs: + action: (String) IAM policy rule action (allow or deny). + default_service_strategy: (String) Default service strategy (allow or deny). + description: (String) A free-form text describing the IAM Role + editable: (Boolean) Defines if IAM Role Policy is editable or not. + expression: (String) IAM policy rule expression. + id: (String) The ID of this resource. + labels: (Map of String) IAM Role labels. + name: (String) ❗Name of IAM Role. + permissions: (List of String) IAM Role permissions. + policy: (Attributes) IAM Policy. (see below for nested schema) + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + resources: (List of String, Deprecated) + rules: (Attributes List) List of IAM service rules (if type is rules). (see below for nested schema) + services: (Attributes Map) IAM policy services. (see below for nested schema) + timeouts: (Block, Optional) (see below for nested schema) + type: (String) Service type (rules, allow, or deny). + importStatements: [] + exoscale_instance_pool: + subCategory: "" + description: 'Manage Exoscale Instance Pools https://community.exoscale.com/documentation/compute/instance-pools/. Corresponding data sources: exoscaleinstancepool ../data-sources/instance_pool.md, exoscaleinstancepool_list ../data-sources/instance_pool_list.md.' + name: exoscale_instance_pool + title: exoscale_instance_pool Resource - terraform-provider-exoscale + examples: + - name: my_instance_pool + manifest: |- + { + "disk_size": 10, + "instance_type": "standard.medium", + "name": "my-instance-pool", + "size": 3, + "template_id": "${data.exoscale_template.my_template.id}", + "zone": "ch-gva-2" + } + references: + template_id: data.exoscale_template.my_template.id + argumentDocs: + affinity_group_ids: (Set of String, Deprecated) A list of exoscale_anti_affinity_group (IDs; may only be set at creation time). + anti_affinity_group_ids: (Set of String) A list of exoscale_anti_affinity_group (IDs; may only be set at creation time). + create: (String) + delete: (String) + deploy_target_id: (String) A deploy target ID. + description: (String) A free-form text describing the pool. + disk_size: (Number) The managed instances disk size (GiB). + elastic_ip_ids: (Set of String) A list of exoscale_elastic_ip (IDs). + id: (String) The ID of this resource. + instance_prefix: '(String) The string used to prefix managed instances name (default: pool).' + instance_type: (String) The managed compute instances type (., e.g. standard.medium; use the Exoscale CLI - exo compute instance-type list - for the list of available types). + instances: (Block Set) The list of managed instances. Structure is documented below. (see below for nested schema) + ipv6: '(Boolean) Enable IPv6 on managed instances (boolean; default: false).' + ipv6_address: (String) The instance (main network interface) IPv6 address. + key_pair: (String) The exoscale_ssh_key (name) to authorize in the managed instances. + labels: (Map of String) A map of key/value labels. + name: (String) The instance pool name. + network_ids: (Set of String) A list of exoscale_private_network (IDs). + public_ip_address: (String) The instance (main network interface) IPv4 address. + read: (String) + security_group_ids: (Set of String) A list of exoscale_security_group (IDs). + service_offering: (String, Deprecated) The managed instances type. Please use the instance_type argument instead. + size: (Number) The number of managed instances. + state: (String) + template_id: (String) The exoscale_template (ID) to use when creating the managed instances. + timeouts: (Block, Optional) (see below for nested schema) + update: (String) + user_data: (String) cloud-init configuration to apply to the managed instances. + virtual_machines: (Set of String, Deprecated) The list of managed instances (IDs). Please use the instances.*.id attribute instead. + zone: (String) ❗ The Exoscale Zone name. + importStatements: + - |- + # An existing instance pool may be imported by `@`: + + terraform import \ + exoscale_instance_pool.my_instance_pool \ + f81d4fae-7dec-11d0-a765-00a0c91e6bf6@ch-gva-2 + exoscale_instance_pool Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale Instance Pools https://community.exoscale.com/documentation/compute/instance-pools/ data. Corresponding resource: exoscaleinstancepool ../resources/instance_pool.md.' + name: exoscale_instance_pool Data Source - terraform-provider-exoscale + title: exoscale_instance_pool Data Source - terraform-provider-exoscale + argumentDocs: + affinity_group_ids: (Set of String, Deprecated) The list of attached exoscale_anti_affinity_group (IDs). Use anti_affinity_group_ids instead. + anti_affinity_group_ids: (Set of String) The list of attached exoscale_anti_affinity_group (IDs). + deploy_target_id: (String) The deploy target ID. + description: (String) The instance pool description. + disk_size: (Number) The managed instances disk size. + elastic_ip_ids: (Set of String) The list of attached exoscale_elastic_ip (IDs). + id: (String) The instance pool ID to match (conflicts with name). + instance_prefix: (String) The string used to prefix the managed instances name. + instance_type: (String) The managed instances type. + instances: (Set of Object) The list of managed instances. Structure is documented below. (see below for nested schema) + ipv6: (Boolean) Whether IPv6 is enabled on managed instances. + ipv6_address: (String) + key_pair: (String) The exoscale_ssh_key (name) authorized on the managed instances. + labels: (Map of String) A map of key/value labels. + name: (String) The pool name to match (conflicts with id). + network_ids: (Set of String) The list of attached exoscale_private_network (IDs). + public_ip_address: (String) + security_group_ids: (Set of String) The list of attached exoscale_security_group (IDs). + size: (Number) The number managed instances. + state: (String) The pool state. + template_id: (String) The managed instances exoscale_template ID. + user_data: (String) cloud-init configuration. + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_instance_pool_list Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'List Exoscale Instance Pools https://community.exoscale.com/documentation/compute/instance-pools/. Corresponding resource: exoscaleinstancepool ../resources/instance_pool.md.' + name: exoscale_instance_pool_list Data Source - terraform-provider-exoscale + title: exoscale_instance_pool_list Data Source - terraform-provider-exoscale + argumentDocs: + affinity_group_ids: (Set of String) + anti_affinity_group_ids: (Set of String) + deploy_target_id: (String) + description: (String) + disk_size: (Number) + elastic_ip_ids: (Set of String) + id: (String) The ID of this resource. + instance_prefix: (String) + instance_type: (String) + instances: (Set of Object) (see below for nested schema) + ipv6: (Boolean) + ipv6_address: (String) + key_pair: (String) + labels: (Map of String) + name: (String) + network_ids: (Set of String) + pools: (List of Object) The list of exoscale_instance_pool. (see below for nested schema) + public_ip_address: (String) + security_group_ids: (Set of String) + size: (Number) + state: (String) + template_id: (String) + user_data: (String) + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_nlb: + subCategory: "" + description: Manage Exoscale Network Load Balancers (NLB). + name: exoscale_nlb + title: exoscale_nlb Resource - terraform-provider-exoscale + examples: + - name: my_nlb + manifest: |- + { + "name": "my-nlb", + "zone": "ch-gva-2" + } + argumentDocs: + create: (String) + created_at: (String) The NLB creation date. + delete: (String) + description: (String) A free-form text describing the NLB. + id: (String) The ID of this resource. + ip_address: (String) The NLB IPv4 address. + labels: (Map of String) A map of key/value labels. + name: (String) The network load balancer (NLB) name. + read: (String) + services: (Set of String) The list of the exoscale_nlb_service (names). + state: (String) The current NLB state. + timeouts: (Block, Optional) (see below for nested schema) + update: (String) + zone: (String) ❗ The Exoscale Zone name. + importStatements: [] + exoscale_nlb Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale Network Load Balancers (NLB) https://community.exoscale.com/documentation/compute/network-load-balancer/ data. Corresponding resource: exoscale_nlb ../resources/nlb.md.' + name: exoscale_nlb Data Source - terraform-provider-exoscale + title: exoscale_nlb Data Source - terraform-provider-exoscale + argumentDocs: + created_at: (String) The NLB creation date. + description: (String) The Network Load Balancers (NLB) description. + id: (String) The Network Load Balancers (NLB) ID to match (conflicts with name). + ip_address: (String) The NLB public IPv4 address. + name: (String) The NLB name to match (conflicts with id). + state: (String) The current NLB state. + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_nlb_service: + subCategory: "" + description: Manage Exoscale Network Load Balancer (NLB) https://community.exoscale.com/documentation/compute/network-load-balancer/ Services. + name: exoscale_nlb_service + title: exoscale_nlb_service Resource - terraform-provider-exoscale + examples: + - name: my_nlb_service + manifest: |- + { + "healthcheck": [ + { + "interval": 5, + "mode": "https", + "port": 8443, + "retries": 1, + "timeout": 3, + "tls_sni": "example.net", + "uri": "/healthz" + } + ], + "instance_pool_id": "${exoscale_instance_pool.my_instance_pool.id}", + "name": "my-nlb-service", + "nlb_id": "${exoscale_nlb.my_nlb.id}", + "port": 443, + "protocol": "tcp", + "strategy": "round-robin", + "target_port": 8443, + "zone": "${exoscale_nlb.my_nlb.zone}" + } + references: + instance_pool_id: exoscale_instance_pool.my_instance_pool.id + nlb_id: exoscale_nlb.my_nlb.id + zone: exoscale_nlb.my_nlb.zone + dependencies: + exoscale_nlb.my_nlb: |- + { + "name": "my-nlb", + "zone": "ch-gva-2" + } + argumentDocs: + create: (String) + delete: (String) + description: (String) A free-form text describing the NLB service. + healthcheck: '(Block Set, Min: 1) The service health checking configuration. (see below for nested schema)' + id: (String) The ID of this resource. + instance_pool_id: (String) ❗ The exoscale_instance_pool (ID) to forward traffic to. + interval: '(Number) The healthcheck interval in seconds (default: 10).' + mode: '(String) The healthcheck mode (tcp|http|https; default: tcp).' + name: (String) The NLB service name. + nlb_id: (String) ❗ The parent exoscale_nlb ID. + port: (Number) The healthcheck port. + protocol: '(String) The protocol (tcp|udp; default: tcp).' + read: (String) + retries: '(Number) The healthcheck retries (default: 1).' + state: (String) + strategy: '(String) The strategy (round-robin|source-hash; default: round-robin).' + target_port: (Number) The (TCP/UDP) port to forward traffic to (on target instance pool members). + timeout: '(Number) The healthcheck timeout (seconds; default: 5).' + timeouts: (Block, Optional) (see below for nested schema) + tls_sni: (String) The healthcheck TLS SNI server name (only if mode is https). + update: (String) + uri: (String) The healthcheck URI (must be set only if mode is http(s)). + zone: (String) ❗ The Exoscale Zone name. + importStatements: + - |- + # An existing NLB service may be imported by `/@`: + + terraform import \ + exoscale_nlb_service.my_nlb_service \ + f81d4fae-7dec-11d0-a765-00a0c91e6bf6/9ecc6b8b-73d4-4211-8ced-f7f29bb79524@ch-gva-2 + exoscale_nlb_service_list Data Source - terraform-provider-exoscale: + subCategory: "" + description: Fetch Exoscale + name: exoscale_nlb_service_list Data Source - terraform-provider-exoscale + title: exoscale_nlb_service_list Data Source - terraform-provider-exoscale + argumentDocs: + description: (String) NLB service description. + healthcheck: (Object) (see below for nested schema) + id: (String) The ID of this resource. + instance_pool_id: (String) The exoscale_instance_pool (ID) to forward traffic to. + interval: (Number) + mode: (String) + name: (String) NLB Service name. + nlb_id: (String) The NLB ID to match (conflicts with name). + nlb_name: (String) The NLB name to match (conflicts with id). + port: (Number) Port exposed on the NLB's public IP. + protocol: (String) Network traffic protocol. + read: (String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + retries: (Number) + services: (Attributes List) The list of exoscale_nlb_service. (see below for nested schema) + state: (String) NLB Service State. + strategy: (String) The strategy (round-robin|source-hash). + target_port: (Number) Port on which the network traffic will be forwarded to on the receiving instance. + timeout: (Number) + timeouts: (Block, Optional) (see below for nested schema) + tls_sni: (String) + uri: (String) + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_private_network: + subCategory: "" + description: Manage Exoscale Private Networks. + name: exoscale_private_network + title: exoscale_private_network Resource - terraform-provider-exoscale + examples: + - name: my_private_network + manifest: |- + { + "name": "my-private-network", + "zone": "ch-gva-2" + } + - name: my_managed_private_network + manifest: |- + { + "end_ip": "10.0.0.253", + "name": "my-managed-private-network", + "netmask": "255.255.255.0", + "start_ip": "10.0.0.20", + "zone": "ch-gva-2" + } + argumentDocs: + create: (String) + delete: (String) + description: (String) A free-form text describing the network. + end_ip: (String) (For managed Privnets) The first/last IPv4 addresses used by the DHCP service for dynamic leases. + id: (String) The ID of this resource. + labels: (Map of String) A map of key/value labels. + name: (String) The private network name. + netmask: (String) (For managed Privnets) The network mask defining the IPv4 network allowed for static leases. + read: (String) + start_ip: (String) (For managed Privnets) The first/last IPv4 addresses used by the DHCP service for dynamic leases. + timeouts: (Block, Optional) (see below for nested schema) + update: (String) + zone: (String) ❗ The Exoscale Zone name. + importStatements: + - |- + terraform import \ + exoscale_private_network.my_private_network \ + f81d4fae-7dec-11d0-a765-00a0c91e6bf6@ch-gva-2 + exoscale_private_network Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale Private Networks https://community.exoscale.com/documentation/compute/private-networks/ data. Corresponding resource: exoscaleprivatenetwork ../resources/private_network.md.' + name: exoscale_private_network Data Source - terraform-provider-exoscale + title: exoscale_private_network Data Source - terraform-provider-exoscale + argumentDocs: + description: (String) The private network description. + end_ip: (String) The first/last IPv4 addresses used by the DHCP service for dynamic leases. + id: (String) The private network ID to match (conflicts with name). + labels: (Map of String) A map of key/value labels. + name: (String) The network name to match (conflicts with id). + netmask: (String) The network mask defining the IPv4 network allowed for static leases. + start_ip: (String) The first/last IPv4 addresses used by the DHCP service for dynamic leases. + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_security_group: + subCategory: "" + description: Manage Exoscale Security Groups. + name: exoscale_security_group + title: exoscale_security_group Resource - terraform-provider-exoscale + examples: + - name: my_security_group + manifest: |- + { + "name": "my-security-group" + } + argumentDocs: + create: (String) + delete: (String) + description: (String) ❗ A free-form text describing the group. + external_sources: (Set of String) A list of external network sources, in CIDR notation. + id: (String) The ID of this resource. + name: (String) ❗ The security group name. + read: (String) + timeouts: (Block, Optional) (see below for nested schema) + importStatements: + - |- + terraform import \ + exoscale_security_group.my_security_group \ + f81d4fae-7dec-11d0-a765-00a0c91e6bf6 + exoscale_security_group Data Source - terraform-provider-exoscale: + subCategory: "" + description: 'Fetch Exoscale Security Groups https://community.exoscale.com/documentation/compute/security-groups/ data. Corresponding resource: exoscalesecuritygroup ../resources/security_group.md.' + name: exoscale_security_group Data Source - terraform-provider-exoscale + title: exoscale_security_group Data Source - terraform-provider-exoscale + argumentDocs: + external_sources: (Set of String) The list of external network sources, in CIDR notation. + id: (String) The security group ID to match (conflicts with name) + name: (String) The name to match (conflicts with id) + importStatements: [] + exoscale_security_group_rule: + subCategory: "" + description: Manage Exoscale Security Group https://community.exoscale.com/documentation/compute/security-groups/ Rules. + name: exoscale_security_group_rule + title: exoscale_security_group_rule Resource - terraform-provider-exoscale + examples: + - name: my_security_group_rule + manifest: |- + { + "cidr": "0.0.0.0/0", + "end_port": 80, + "protocol": "TCP", + "security_group_id": "${exoscale_security_group.my_security_group.id}", + "start_port": 80, + "type": "INGRESS" + } + references: + security_group_id: exoscale_security_group.my_security_group.id + dependencies: + exoscale_security_group.my_security_group: |- + { + "name": "my-security-group" + } + argumentDocs: + cidr: (String) ❗ An (INGRESS) source / (EGRESS) destination IP subnet (in CIDR notation) to match (conflicts with public_security_group/user_security_group/user_security_group_id). + create: (String) + delete: (String) + description: (String) ❗ A free-form text describing the security group rule. + end_port: (Number) ❗ A TCP/UDP port range to match. + icmp_code: (Number) ❗ An ICMP/ICMPv6 type/code to match. + icmp_type: (Number) ❗ An ICMP/ICMPv6 type/code to match. + id: (String) The ID of this resource. + protocol: (String) ❗ The network protocol to match (TCP, UDP, ICMP, ICMPv6, AH, ESP, GRE, IPIP or ALL) + public_security_group: (String) ❗ An (INGRESS) source / (EGRESS) destination public security group name to match (conflicts with cidr/user_security_group/user_security_group_id). + read: (String) + security_group: (String, Deprecated) ❗ The parent security group name. Please use the security_group_id argument along the exoscale_security_group data source instead. + security_group_id: (String) ❗ The parent exoscale_security_group ID. + start_port: (Number) ❗ A TCP/UDP port range to match. + timeouts: (Block, Optional) (see below for nested schema) + type: (String) ❗ The traffic direction to match (INGRESS or EGRESS). + user_security_group: (String, Deprecated) ❗ An (INGRESS) source / (EGRESS) destination security group name to match (conflicts with cidr/public_security_group/user_security_group_id). Please use the user_security_group_id argument along the exoscale_security_group data source instead. + user_security_group_id: (String) ❗ An (INGRESS) source / (EGRESS) destination security group ID to match (conflicts with cidr/public_security_group/user_security_group)). + importStatements: + - |- + # An existing security group rule may be imported by `/`: + + terraform import \ + exoscale_security_group_rule.my_security_group_rule \ + f81d4fae-7dec-11d0-a765-00a0c91e6bf6/9ecc6b8b-73d4-4211-8ced-f7f29bb79524 + exoscale_sks_cluster: + subCategory: "" + description: Manage Exoscale Scalable Kubernetes Service (SKS) https://community.exoscale.com/documentation/sks/ Clusters. + name: exoscale_sks_cluster + title: exoscale_sks_cluster Resource - terraform-provider-exoscale + examples: + - name: my_sks_cluster + manifest: |- + { + "name": "my-sks-cluster", + "zone": "ch-gva-2" + } + argumentDocs: + addons: (Set of String, Deprecated) + aggregation_ca: (String) The CA certificate (in PEM format) for TLS communications between the control plane and the aggregation layer (e.g. metrics-server). + auto_upgrade: (Boolean) Enable automatic upgrading of the control plane version. + client_id: (String) The OpenID client ID. + cni: (String) The CNI plugin that is to be used. Available options are "calico" or "cilium". Defaults to "calico". Setting empty string will result in a cluster with no CNI. + control_plane_ca: (String) The CA certificate (in PEM format) for TLS communications between control plane components. + create: (String) + created_at: (String) The cluster creation date. + delete: (String) + description: (String) A free-form text describing the cluster. + endpoint: (String) The cluster API endpoint. + exoscale_ccm: '(Boolean) Deploy the Exoscale Cloud Controller Manager in the control plane (boolean; default: true; may only be set at creation time).' + exoscale_csi: '(Boolean) Deploy the Exoscale Container Storage Interface on worker nodes (boolean; default: false; requires the CCM to be enabled).' + groups_claim: (String) An OpenID JWT claim to use as the user's group. + groups_prefix: (String) An OpenID prefix prepended to group claims. + id: (String) The SKS cluster ID. + issuer_url: (String) The OpenID provider URL. + kubelet_ca: (String) The CA certificate (in PEM format) for TLS communications between kubelets and the control plane. + labels: (Map of String) A map of key/value labels. + metrics_server: '(Boolean) Deploy the Kubernetes Metrics Server in the control plane (boolean; default: true; may only be set at creation time).' + name: (String) The SKS cluster name. + nodepools: (Set of String) The list of exoscale_sks_nodepool (IDs) attached to the cluster. + oidc: '(Block List, Max: 1) An OpenID Connect configuration to provide to the Kubernetes API server (may only be set at creation time). Structure is documented below. (see below for nested schema)' + read: (String) + required_claim: (Map of String) A map of key/value pairs that describes a required claim in the OpenID Token. + service_level: '(String) The service level of the control plane (pro or starter; default: pro; may only be set at creation time).' + state: (String) The cluster state. + timeouts: (Block, Optional) (see below for nested schema) + update: (String) + username_claim: (String) An OpenID JWT claim to use as the user name. + username_prefix: (String) An OpenID prefix prepended to username claims. + version: '(String) The version of the control plane (default: latest version available from the API; see exo compute sks versions for reference; may only be set at creation time).' + zone: (String) ❗ The Exoscale Zone name. + importStatements: + - |- + terraform import \ + exoscale_sks_cluster.my_sks_cluster \ + f81d4fae-7dec-11d0-a765-00a0c91e6bf6@ch-gva-2 + exoscale_sks_cluster Data Source - terraform-provider-exoscale: + subCategory: "" + name: exoscale_sks_cluster Data Source - terraform-provider-exoscale + title: exoscale_sks_cluster Data Source - terraform-provider-exoscale + argumentDocs: + addons: (Set of String, Deprecated) + aggregation_ca: (String) The CA certificate (in PEM format) for TLS communications between the control plane and the aggregation layer (e.g. metrics-server). + auto_upgrade: (Boolean) Enable automatic upgrading of the control plane version. + client_id: (String) The OpenID client ID. + cni: (String) The CNI plugin that is to be used. Available options are "calico" or "cilium". Defaults to "calico". Setting empty string will result in a cluster with no CNI. + control_plane_ca: (String) The CA certificate (in PEM format) for TLS communications between control plane components. + created_at: (String) The cluster creation date. + description: (String) A free-form text describing the cluster. + endpoint: (String) The cluster API endpoint. + exoscale_ccm: '(Boolean) Deploy the Exoscale Cloud Controller Manager in the control plane (boolean; default: true; may only be set at creation time).' + exoscale_csi: '(Boolean) Deploy the Exoscale Container Storage Interface on worker nodes (boolean; default: false; requires the CCM to be enabled).' + groups_claim: (String) An OpenID JWT claim to use as the user's group. + groups_prefix: (String) An OpenID prefix prepended to group claims. + id: (String) The ID of this resource. + issuer_url: (String) The OpenID provider URL. + kubelet_ca: (String) The CA certificate (in PEM format) for TLS communications between kubelets and the control plane. + labels: (Map of String) A map of key/value labels. + metrics_server: '(Boolean) Deploy the Kubernetes Metrics Server in the control plane (boolean; default: true; may only be set at creation time).' + name: (String) + nodepools: (Set of String) The list of exoscale_sks_nodepool (IDs) attached to the cluster. + oidc: '(Block List, Max: 1) An OpenID Connect configuration to provide to the Kubernetes API server (may only be set at creation time). Structure is documented below. (see below for nested schema)' + required_claim: (Map of String) A map of key/value pairs that describes a required claim in the OpenID Token. + service_level: '(String) The service level of the control plane (pro or starter; default: pro; may only be set at creation time).' + state: (String) The cluster state. + username_claim: (String) An OpenID JWT claim to use as the user name. + username_prefix: (String) An OpenID prefix prepended to username claims. + version: '(String) The version of the control plane (default: latest version available from the API; see exo compute sks versions for reference; may only be set at creation time).' + zone: (String) + importStatements: [] + exoscale_sks_cluster_list Data Source - terraform-provider-exoscale: + subCategory: "" + name: exoscale_sks_cluster_list Data Source - terraform-provider-exoscale + title: exoscale_sks_cluster_list Data Source - terraform-provider-exoscale + argumentDocs: + addons: (Set of String) + aggregation_ca: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + auto_upgrade: (Boolean) Match against this bool + client_id: (String) + clusters: (List of Object) (see below for nested schema) + cni: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + control_plane_ca: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + created_at: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + description: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + endpoint: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + exoscale_ccm: (Boolean) Match against this bool + exoscale_csi: (Boolean) Match against this bool + groups_claim: (String) + groups_prefix: (String) + id: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + issuer_url: (String) + kubelet_ca: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + labels: (Map of String) Match against key/values. Keys are matched exactly, while values may be matched as a regex if you supply a string that begins and ends with "/" + metrics_server: (Boolean) Match against this bool + name: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + nodepools: (Set of String) + oidc: (List of Object) (see below for nested schema) + required_claim: (Map of String) + service_level: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + state: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + username_claim: (String) + username_prefix: (String) + version: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_sks_kubeconfig: + subCategory: "" + description: Manage Exoscale Scalable Kubernetes Service (SKS) Credentials (Kubeconfig). + name: exoscale_sks_kubeconfig + title: exoscale_sks_kubeconfig Resource - terraform-provider-exoscale + examples: + - name: my_sks_kubeconfig + manifest: |- + { + "cluster_id": "${exoscale_sks_cluster.my_sks_cluster.id}", + "groups": [ + "system:masters" + ], + "user": "kubernetes-admin", + "zone": "${exoscale_sks_cluster.my_sks_cluster.zone}" + } + references: + cluster_id: exoscale_sks_cluster.my_sks_cluster.id + zone: exoscale_sks_cluster.my_sks_cluster.zone + dependencies: + exoscale_sks_cluster.my_sks_cluster: |- + { + "name": "my-sks-cluster", + "zone": "ch-gva-2" + } + argumentDocs: + cluster_id: (String) ❗ The parent exoscale_sks_cluster ID. + create: (String) + delete: (String) + early_renewal_seconds: '(Number) If set, the resource will consider the Kubeconfig to have expired the given number of seconds before its actual CA certificate or client certificate expiry time. This can be useful to deploy an updated Kubeconfig in advance of the expiration of its internal current certificate. Note however that the old certificate remains valid until its true expiration time since this resource does not (and cannot) support revocation. Also note this advance update can only take place if the Terraform configuration is applied during the early renewal period (seconds; default: 0).' + groups: (Set of String) ❗ Group names in the generated Kubeconfig. The certificate present in the Kubeconfig will have these roles set in the Organization field. + id: (String) The ID of this resource. + kubeconfig: (String, Sensitive) The generated Kubeconfig (YAML content). + read: (String) + ready_for_renewal: (Boolean) + timeouts: (Block, Optional) (see below for nested schema) + ttl_seconds: '(Number) ❗ The Time-to-Live of the Kubeconfig, after which it will expire / become invalid (seconds; default: 2592000 = 30 days).' + update: (String) + user: (String) ❗ User name in the generated Kubeconfig. The certificate present in the Kubeconfig will also have this name set for the CN field. + zone: (String) ❗ The Exoscale Zone name. + importStatements: [] + exoscale_sks_nodepool: + subCategory: "" + description: Manage Exoscale Scalable Kubernetes Service (SKS) Node Pools. + name: exoscale_sks_nodepool + title: exoscale_sks_nodepool Resource - terraform-provider-exoscale + examples: + - name: my_sks_nodepool + manifest: |- + { + "cluster_id": "${exoscale_sks_cluster.my_sks_cluster.id}", + "instance_type": "standard.medium", + "name": "my-sks-nodepool", + "size": 3, + "zone": "${exoscale_sks_cluster.my_sks_cluster.zone}" + } + references: + cluster_id: exoscale_sks_cluster.my_sks_cluster.id + zone: exoscale_sks_cluster.my_sks_cluster.zone dependencies: - aws_instance.cluster: |- + exoscale_sks_cluster.my_sks_cluster: |- { - "ami": "ami-0dcc1e21636832c5d", - "count": 3, - "instance_type": "m5.large" + "name": "my-sks-cluster", + "zone": "ch-gva-2" } argumentDocs: - id: (String) This is set to a random value at create time. - triggers: (Map of String) A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners. + anti_affinity_group_ids: (Set of String) A list of exoscale_anti_affinity_group (IDs) to be attached to the managed instances. + cluster_id: (String) ❗ The parent exoscale_sks_cluster ID. + create: (String) + created_at: (String) The pool creation date. + delete: (String) + deploy_target_id: (String) A deploy target ID. + description: (String) A free-form text describing the pool. + disk_size: '(Number) The managed instances disk size (GiB; default: 50).' + high_threshold: (Number) The percent of disk usage after which image garbage collection is always run + id: (String) The SKS node pool ID. + instance_pool_id: (String) The underlying exoscale_instance_pool ID. + instance_prefix: (String) The string used to prefix the managed instances name (default pool). + instance_type: (String) The managed compute instances type (., e.g. standard.medium; use the Exoscale CLI - exo compute instance-type list - for the list of available types). + kubelet_image_gc: (Block Set) Configuration for this nodepool's kubelet image garbage collector (see below for nested schema) + labels: (Map of String) A map of key/value labels. + low_threshold: (Number) The percent of disk usage before which image garbage collection is never run + min_age: (String) The minimum age for an unused image before it is garbage collected (k8s duration format, eg. 1h) + name: (String) The SKS node pool name. + private_network_ids: (Set of String) A list of exoscale_private_network (IDs) to be attached to the managed instances. + read: (String) + security_group_ids: (Set of String) A list of exoscale_security_group (IDs) to be attached to the managed instances. + size: (Number) + state: (String) The current pool state. + storage_lvm: (Boolean) Create nodes with non-standard partitioning for persistent storage (requires min 100G of disk space) (may only be set at creation time). + taints: (Map of String) A map of key/value Kubernetes taints ('taints = { = ":" }'). + template_id: (String) The managed instances template ID. + timeouts: (Block, Optional) (see below for nested schema) + update: (String) + version: (String) The managed instances version. + zone: (String) ❗ The Exoscale Zone name. + importStatements: + - |- + terraform import \ + exoscale_sks_nodepool.my_sks_nodepool \ + f81d4fae-7dec-11d0-a765-00a0c91e6bf6/9ecc6b8b-73d4-4211-8ced-f7f29bb79524@ch-gva-2 + exoscale_sks_nodepool Data Source - terraform-provider-exoscale: + subCategory: "" + name: exoscale_sks_nodepool Data Source - terraform-provider-exoscale + title: exoscale_sks_nodepool Data Source - terraform-provider-exoscale + argumentDocs: + anti_affinity_group_ids: (Set of String) A list of exoscale_anti_affinity_group (IDs) to be attached to the managed instances. + cluster_id: (String) + created_at: (String) The pool creation date. + deploy_target_id: (String) A deploy target ID. + description: (String) A free-form text describing the pool. + disk_size: '(Number) The managed instances disk size (GiB; default: 50).' + high_threshold: (Number) The percent of disk usage after which image garbage collection is always run + id: (String) The ID of this resource. + instance_pool_id: (String) The underlying exoscale_instance_pool ID. + instance_prefix: (String) The string used to prefix the managed instances name (default pool). + instance_type: (String) The managed compute instances type (., e.g. standard.medium; use the Exoscale CLI - exo compute instance-type list - for the list of available types). + kubelet_image_gc: (Block Set) Configuration for this nodepool's kubelet image garbage collector (see below for nested schema) + labels: (Map of String) A map of key/value labels. + low_threshold: (Number) The percent of disk usage before which image garbage collection is never run + min_age: (String) The minimum age for an unused image before it is garbage collected (k8s duration format, eg. 1h) + name: (String) + private_network_ids: (Set of String) A list of exoscale_private_network (IDs) to be attached to the managed instances. + security_group_ids: (Set of String) A list of exoscale_security_group (IDs) to be attached to the managed instances. + size: (Number) + state: (String) The current pool state. + storage_lvm: (Boolean) Create nodes with non-standard partitioning for persistent storage (requires min 100G of disk space) (may only be set at creation time). + taints: (Map of String) A map of key/value Kubernetes taints ('taints = { = ":" }'). + template_id: (String) The managed instances template ID. + version: (String) The managed instances version. + zone: (String) + importStatements: [] + exoscale_sks_nodepool_list Data Source - terraform-provider-exoscale: + subCategory: "" + name: exoscale_sks_nodepool_list Data Source - terraform-provider-exoscale + title: exoscale_sks_nodepool_list Data Source - terraform-provider-exoscale + argumentDocs: + anti_affinity_group_ids: (Set of String) + cluster_id: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + created_at: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + deploy_target_id: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + description: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + disk_size: (Number) Match against this int + high_threshold: (Number) + id: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + instance_pool_id: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + instance_prefix: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + instance_type: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + kubelet_image_gc: (Set of Object) (see below for nested schema) + labels: (Map of String) Match against key/values. Keys are matched exactly, while values may be matched as a regex if you supply a string that begins and ends with "/" + low_threshold: (Number) + min_age: (String) + name: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + nodepools: (List of Object) (see below for nested schema) + private_network_ids: (Set of String) + security_group_ids: (Set of String) + size: (Number) Match against this int + state: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + storage_lvm: (Boolean) Match against this bool + taints: (Map of String) Match against key/values. Keys are matched exactly, while values may be matched as a regex if you supply a string that begins and ends with "/" + template_id: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + version: (String) Match against this string. If you supply a string that begins and ends with a "/" it will be matched as a regex. + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_ssh_key: + subCategory: "" + description: Manage Exoscale SSH Keys. + name: exoscale_ssh_key + title: exoscale_ssh_key Resource - terraform-provider-exoscale + examples: + - name: my_ssh_key + manifest: |- + { + "name": "my-ssh-key", + "public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGRY..." + } + - name: my_ssh_key + manifest: |- + { + "name": "my-ssh-key", + "public_key": "${tls_private_key.my_ssh_key.public_key_openssh}" + } + references: + public_key: tls_private_key.my_ssh_key.public_key_openssh + dependencies: + tls_private_key.my_ssh_key: |- + { + "algorithm": "ED25519" + } + argumentDocs: + create: (String) + delete: (String) + fingerprint: (String) The SSH key unique identifier. + id: (String) The ID of this resource. + name: (String) ❗ The SSH key name. + public_key: (String) ❗ The SSH public key that will be authorized in compute instances. + read: (String) + timeouts: (Block, Optional) (see below for nested schema) + importStatements: + - |- + terraform import \ + exoscale_ssh_key.my_ssh_key \ + my-ssh-key + exoscale_template Data Source - terraform-provider-exoscale: + subCategory: "" + description: Fetch Exoscale Compute Instance Templates https://community.exoscale.com/documentation/compute/custom-templates/ data. Exoscale instance templates are regularly updated to include the latest updates. Whenever this happens, the template ID also changes which can lead terraform to plan the recreation of an instance. To work around this you may find this issue https://github.com/exoscale/terraform-provider-exoscale/issues/366 helpful. + name: exoscale_template Data Source - terraform-provider-exoscale + title: exoscale_template Data Source - terraform-provider-exoscale + argumentDocs: + default_user: (String) Username to use to log into a compute instance based on this template + id: (String) The compute instance template ID to match (conflicts with name). + name: (String) The template name to match (conflicts with id) (when multiple templates have the same name, the newest one will be returned). + visibility: '(String) A template category filter (default: public); among: - public - official Exoscale templates - private - custom templates private to my organization' + zone: (String) The Exoscale Zone name. + importStatements: [] + exoscale_zones Data Source - terraform-provider-exoscale: + subCategory: "" + description: Lists all zones. + name: exoscale_zones Data Source - terraform-provider-exoscale + title: exoscale_zones Data Source - terraform-provider-exoscale + argumentDocs: + zones: (List of String) List of zones + importStatements: [] + security_group_rules migration Guide: + subCategory: "" + description: Migrating from security_group_rules to security_group + name: security_group_rules migration Guide + title: security_group_rules migration Guide + argumentDocs: + bastion: . + exoscale_security_group: and exoscale_security_group_rule resources. + exoscale_security_group.webapp: '. In our case: exoscale_security_group_rules.webapp' + terraform state pull: and restored with terraform state push + webapp_http.webapp_public: allows access to HTTP(S) services, on both port 80 and 443, leveraging the for_each notation of Terraform. + webapp_http.webapp_ssh: allows access to SSH through a bastion security group + importStatements: [] + ssh_keypair migration Guide: + subCategory: "" + description: Migrating from ssh_keypair to ssh_key + name: ssh_keypair migration Guide + title: ssh_keypair migration Guide + argumentDocs: {} importStatements: [] diff --git a/config/provider.go b/config/provider.go index 3fbc5b1..e203256 100644 --- a/config/provider.go +++ b/config/provider.go @@ -10,7 +10,8 @@ import ( ujconfig "github.com/crossplane/upjet/pkg/config" - "github.com/upbound/upjet-provider-template/config/exoscale_block_storage_volume" + "github.com/upbound/upjet-provider-template/config/exoscale_iam_role" + // "github.com/upbound/upjet-provider-template/config/exoscale_block_storage_volume_snapshot" ) const ( @@ -37,7 +38,8 @@ func GetProvider() *ujconfig.Provider { for _, configure := range []func(provider *ujconfig.Provider){ // add custom config functions //null.Configure, - exoscale_block_storage_volume.Configure, + exoscale_iam_role.Configure, + // exoscale_block_storage_volume_snapshot.Configure, } { configure(pc) } diff --git a/config/schema.json b/config/schema.json index ac6e2ac..b65f2cb 100644 --- a/config/schema.json +++ b/config/schema.json @@ -1 +1 @@ -{"format_version":"1.0","provider_schemas":{"registry.terraform.io/hashicorp/null":{"provider":{"version":0,"block":{"description_kind":"plain"}},"resource_schemas":{"null_resource":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"This is set to a random value at create time.","description_kind":"plain","computed":true},"triggers":{"type":["map","string"],"description":"A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners.","description_kind":"plain","optional":true}},"description":"The `null_resource` resource implements the standard resource lifecycle but takes no further action. On Terraform 1.4 and later, use the [terraform_data resource type](https://developer.hashicorp.com/terraform/language/resources/terraform-data) instead.\n\nThe `triggers` argument allows specifying an arbitrary set of values that, when changed, will cause the resource to be replaced.","description_kind":"plain"}}},"data_source_schemas":{"null_data_source":{"version":0,"block":{"attributes":{"has_computed_default":{"type":"string","description":"If set, its literal value will be stored and returned. If not, its value defaults to `\"default\"`. This argument exists primarily for testing and has little practical use.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"This attribute is only present for some legacy compatibility issues and should not be used. It will be removed in a future version.","description_kind":"plain","deprecated":true,"computed":true},"inputs":{"type":["map","string"],"description":"A map of arbitrary strings that is copied into the `outputs` attribute, and accessible directly for interpolation.","description_kind":"plain","optional":true},"outputs":{"type":["map","string"],"description":"After the data source is \"read\", a copy of the `inputs` map.","description_kind":"plain","computed":true},"random":{"type":"string","description":"A random value. This is primarily for testing and has little practical use; prefer the [hashicorp/random provider](https://registry.terraform.io/providers/hashicorp/random) for more practical random number use-cases.","description_kind":"plain","computed":true}},"description":"The `null_data_source` data source implements the standard data source lifecycle but does not\ninteract with any external APIs.\n\nHistorically, the `null_data_source` was typically used to construct intermediate values to re-use elsewhere in configuration. The\nsame can now be achieved using [locals](https://developer.hashicorp.com/terraform/language/values/locals) or the [terraform_data resource type](https://developer.hashicorp.com/terraform/language/resources/terraform-data) in Terraform 1.4 and later.","description_kind":"plain","deprecated":true}}}}}} +{"format_version":"1.0","provider_schemas":{"registry.terraform.io/exoscale/exoscale":{"provider":{"version":0,"block":{"attributes":{"delay":{"type":"number","description_kind":"plain","deprecated":true,"optional":true},"environment":{"type":"string","description_kind":"plain","optional":true},"key":{"type":"string","description":"Exoscale API key","description_kind":"markdown","optional":true},"secret":{"type":"string","description":"Exoscale API secret","description_kind":"markdown","optional":true,"sensitive":true},"timeout":{"type":"number","description":"Timeout in seconds for waiting on compute resources to become available (by default: 300)","description_kind":"markdown","optional":true}},"description_kind":"plain"}},"resource_schemas":{"exoscale_anti_affinity_group":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"❗ A free-form text describing the group.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"❗ The anti-affinity group name.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale [Anti-Affinity Groups](https://community.exoscale.com/documentation/compute/anti-affinity-groups/).\n\nCorresponding data source: [exoscale_anti_affinity_group](../data-sources/anti_affinity_group.md).","description_kind":"markdown"}},"exoscale_block_storage_volume":{"version":0,"block":{"attributes":{"blocksize":{"type":"number","description":"Volume block size.","description_kind":"markdown","computed":true},"created_at":{"type":"string","description":"Volume creation date.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The ID of this resource.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"Resource labels.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Volume name.","description_kind":"markdown","required":true},"size":{"type":"number","description":"Volume size in GB (default 10). If volume is attached, instance must be stopped to update this value. Volume can only grow, cannot be shrunk.","description_kind":"markdown","optional":true},"snapshot_target":{"nested_type":{"attributes":{"id":{"type":"string","description":"Snapshot ID.","description_kind":"markdown","optional":true}},"nesting_mode":"single"},"description":"Block storage snapshot to use when creating a volume. Read-only after creation.","description_kind":"markdown","optional":true},"state":{"type":"string","description":"Volume state.","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage [Exoscale Block Storage](https://community.exoscale.com/documentation/block-storage/) Volume.\n\nBlock Storage offers persistent externally attached volumes for your workloads.\n","description_kind":"markdown"}},"exoscale_block_storage_volume_snapshot":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"Snapshot creation date.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The ID of this resource.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"Resource labels.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Volume snapshot name.","description_kind":"markdown","required":true},"size":{"type":"number","description":"Snapshot size in GB.","description_kind":"markdown","computed":true},"state":{"type":"string","description":"Snapshot state.","description_kind":"markdown","computed":true},"volume":{"nested_type":{"attributes":{"id":{"type":"string","description":"Snapshot ID.","description_kind":"markdown","required":true}},"nesting_mode":"single"},"description":"Volume from which to create a snapshot.","description_kind":"markdown","required":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage [Exoscale Block Storage](https://community.exoscale.com/documentation/block-storage/) Volume Snapshot.\n\nBlock Storage offers persistent externally attached volumes for your workloads.\n","description_kind":"markdown"}},"exoscale_compute_instance":{"version":0,"block":{"attributes":{"anti_affinity_group_ids":{"type":["set","string"],"description":"❗ A list of [exoscale_anti_affinity_group](./anti_affinity_group.md) (IDs) to attach to the instance (may only be set at creation time).","description_kind":"markdown","optional":true},"block_storage_volume_ids":{"type":["set","string"],"description":"A list of [exoscale_block_storage_volume](./block_storage_volume.md) (ID) to attach to the instance.","description_kind":"markdown","optional":true},"created_at":{"type":"string","description":"The instance creation date.","description_kind":"markdown","computed":true},"deploy_target_id":{"type":"string","description":"❗ A deploy target ID.","description_kind":"markdown","optional":true},"destroy_protected":{"type":"bool","description":"Mark the instance as protected, the Exoscale API will refuse to delete the instance until the protection is removed (boolean; default: `false`).","description_kind":"markdown","optional":true},"disk_size":{"type":"number","description":"The instance disk size (GiB; at least `10`). Can not be decreased after creation. **WARNING**: updating this attribute stops/restarts the instance.","description_kind":"markdown","optional":true,"computed":true},"elastic_ip_ids":{"type":["set","string"],"description":"A list of [exoscale_elastic_ip](./elastic_ip.md) (IDs) to attach to the instance.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipv6":{"type":"bool","description":"Enable IPv6 on the instance (boolean; default: `false`).","description_kind":"markdown","optional":true},"ipv6_address":{"type":"string","description":"The instance (main network interface) IPv6 address (if enabled).","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","optional":true},"mac_address":{"type":"string","description":"MAC address","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The compute instance name.","description_kind":"markdown","required":true},"private":{"type":"bool","description":"Whether the instance is private (no public IP addresses; default: false)","description_kind":"markdown","optional":true},"private_network_ids":{"type":["set","string"],"description":"A list of private networks (IDs) attached to the instance. Please use the `network_interface.*.network_id` argument instead.","description_kind":"markdown","deprecated":true,"computed":true},"public_ip_address":{"type":"string","description":"The instance (main network interface) IPv4 address.","description_kind":"markdown","computed":true},"reverse_dns":{"type":"string","description":"Domain name for reverse DNS record.","description_kind":"markdown","optional":true},"security_group_ids":{"type":["set","string"],"description":"A list of [exoscale_security_group](./security_group.md) (IDs) to attach to the instance.","description_kind":"markdown","optional":true},"ssh_key":{"type":"string","description":"The [exoscale_ssh_key](./ssh_key.md) (name) to authorize in the instance (may only be set at creation time).","description_kind":"markdown","optional":true},"state":{"type":"string","description":"The instance state (`running` or `stopped`; default: `running`).","description_kind":"markdown","optional":true,"computed":true},"template_id":{"type":"string","description":"❗ The [exoscale_template](../data-sources/template.md) (ID) to use when creating the instance.","description_kind":"markdown","required":true},"type":{"type":"string","description":"The instance type (`\u003cfamily\u003e.\u003csize\u003e`, e.g. `standard.medium`; use the [Exoscale CLI](https://github.com/exoscale/cli/) - `exo compute instance-type list` - for the list of available types). **WARNING**: updating this attribute stops/restarts the instance.","description_kind":"markdown","required":true},"user_data":{"type":"string","description":"[cloud-init](https://cloudinit.readthedocs.io/) configuration.","description_kind":"markdown","optional":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"network_interface":{"nesting_mode":"set","block":{"attributes":{"ip_address":{"type":"string","description":"The IPv4 address to request as static DHCP lease if the network interface is attached to a *managed* private network.","description_kind":"markdown","optional":true,"computed":true},"mac_address":{"type":"string","description":"MAC address","description_kind":"markdown","computed":true},"network_id":{"type":"string","description":"The [exoscale_private_network](./private_network.md) (ID) to attach to the instance.","description_kind":"markdown","required":true}},"description":"Private network interfaces (may be specified multiple times). Structure is documented below.","description_kind":"markdown"}},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale [Compute Instances](https://community.exoscale.com/documentation/compute/).\n\nCorresponding data sources: [exoscale_compute_instance](../data-sources/compute_instance.md), [exoscale_compute_instance_list](../data-sources/compute_instance_list.md).\n\nAfter the creation, you can retrieve the password of an instance with [Exoscale CLI](https://github.com/exoscale/cli): `exo compute instance reveal-password NAME`.","description_kind":"markdown"}},"exoscale_database":{"version":1,"block":{"attributes":{"ca_certificate":{"type":"string","description":"CA Certificate required to reach a DBaaS service through a TLS-protected connection.","description_kind":"markdown","computed":true},"created_at":{"type":"string","description":"The creation date of the database service.","description_kind":"markdown","computed":true},"disk_size":{"type":"number","description":"The disk size of the database service.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The ID of this resource.","description_kind":"markdown","computed":true},"maintenance_dow":{"type":"string","description":"The day of week to perform the automated database service maintenance (`never`, `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`, `sunday`).","description_kind":"markdown","optional":true,"computed":true},"maintenance_time":{"type":"string","description":"The time of day to perform the automated database service maintenance (`HH:MM:SS`)","description_kind":"markdown","optional":true,"computed":true},"name":{"type":"string","description":"❗ The name of the database service.","description_kind":"markdown","required":true},"node_cpus":{"type":"number","description":"The number of CPUs of the database service.","description_kind":"markdown","computed":true},"node_memory":{"type":"number","description":"The amount of memory of the database service.","description_kind":"markdown","computed":true},"nodes":{"type":"number","description":"The number of nodes of the database service.","description_kind":"markdown","computed":true},"plan":{"type":"string","description":"The plan of the database service (use the [Exoscale CLI](https://github.com/exoscale/cli/) - `exo dbaas type show \u003cTYPE\u003e --plans` - for reference).","description_kind":"markdown","required":true},"state":{"type":"string","description":"The current state of the database service.","description_kind":"markdown","computed":true},"termination_protection":{"type":"bool","description":"The database service protection boolean flag against termination/power-off.","description_kind":"markdown","optional":true,"computed":true},"type":{"type":"string","description":"❗ The type of the database service (`kafka`, `mysql`, `opensearch`, `pg`, `redis`, `grafana`).","description_kind":"markdown","required":true},"updated_at":{"type":"string","description":"The date of the latest database service update.","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"grafana":{"nesting_mode":"single","block":{"attributes":{"grafana_settings":{"type":"string","description":"Grafana configuration settings in JSON format (`exo dbaas type show grafana --settings=grafana` for reference).","description_kind":"markdown","optional":true,"computed":true},"ip_filter":{"type":["set","string"],"description":"A list of CIDR blocks to allow incoming connections from.","description_kind":"markdown","optional":true,"computed":true}},"description":"*grafana* database service type specific arguments. Structure is documented below.","description_kind":"markdown"}},"kafka":{"nesting_mode":"single","block":{"attributes":{"enable_cert_auth":{"type":"bool","description":"Enable certificate-based authentication method.","description_kind":"markdown","optional":true,"computed":true},"enable_kafka_connect":{"type":"bool","description":"Enable Kafka Connect.","description_kind":"markdown","optional":true,"computed":true},"enable_kafka_rest":{"type":"bool","description":"Enable Kafka REST.","description_kind":"markdown","optional":true,"computed":true},"enable_sasl_auth":{"type":"bool","description":"Enable SASL-based authentication method.","description_kind":"markdown","optional":true,"computed":true},"enable_schema_registry":{"type":"bool","description":"Enable Schema Registry.","description_kind":"markdown","optional":true,"computed":true},"ip_filter":{"type":["set","string"],"description":"A list of CIDR blocks to allow incoming connections from.","description_kind":"markdown","optional":true,"computed":true},"kafka_connect_settings":{"type":"string","description":"Kafka Connect configuration settings in JSON format (`exo dbaas type show kafka --settings=kafka-connect` for reference).","description_kind":"markdown","optional":true,"computed":true},"kafka_rest_settings":{"type":"string","description":"Kafka REST configuration settings in JSON format (`exo dbaas type show kafka --settings=kafka-rest` for reference).","description_kind":"markdown","optional":true,"computed":true},"kafka_settings":{"type":"string","description":"Kafka configuration settings in JSON format (`exo dbaas type show kafka --settings=kafka` for reference).","description_kind":"markdown","optional":true,"computed":true},"schema_registry_settings":{"type":"string","description":"Schema Registry configuration settings in JSON format (`exo dbaas type show kafka --settings=schema-registry` for reference)","description_kind":"markdown","optional":true,"computed":true},"version":{"type":"string","description":"Kafka major version (`exo dbaas type show kafka` for reference; may only be set at creation time).","description_kind":"markdown","optional":true,"computed":true}},"description":"*kafka* database service type specific arguments. Structure is documented below.","description_kind":"markdown"}},"mysql":{"nesting_mode":"single","block":{"attributes":{"admin_password":{"type":"string","description":"A custom administrator account password (may only be set at creation time).","description_kind":"markdown","optional":true,"sensitive":true},"admin_username":{"type":"string","description":"A custom administrator account username (may only be set at creation time).","description_kind":"markdown","optional":true},"backup_schedule":{"type":"string","description":"The automated backup schedule (`HH:MM`).","description_kind":"markdown","optional":true,"computed":true},"ip_filter":{"type":["set","string"],"description":"A list of CIDR blocks to allow incoming connections from.","description_kind":"markdown","optional":true,"computed":true},"mysql_settings":{"type":"string","description":"MySQL configuration settings in JSON format (`exo dbaas type show mysql --settings=mysql` for reference).","description_kind":"markdown","optional":true,"computed":true},"version":{"type":"string","description":"MySQL major version (`exo dbaas type show mysql` for reference; may only be set at creation time).","description_kind":"markdown","optional":true,"computed":true}},"description":"*mysql* database service type specific arguments. Structure is documented below.","description_kind":"markdown"}},"opensearch":{"nesting_mode":"single","block":{"attributes":{"fork_from_service":{"type":"string","description":"❗ Service name","description_kind":"markdown","optional":true},"ip_filter":{"type":["set","string"],"description":"Allow incoming connections from this list of CIDR address block, e.g. `[\"10.20.0.0/16\"]","description_kind":"markdown","optional":true,"computed":true},"keep_index_refresh_interval":{"type":"bool","description":"Aiven automation resets index.refresh_interval to default value for every index to be sure that indices are always visible to search. If it doesn't fit your case, you can disable this by setting up this flag to true.","description_kind":"markdown","optional":true},"max_index_count":{"type":"number","description":"Maximum number of indexes to keep (Minimum value is `0`)","description_kind":"markdown","optional":true},"recovery_backup_name":{"type":"string","description":"❗ Name of a backup to recover from","description_kind":"markdown","optional":true},"settings":{"type":"string","description":"OpenSearch-specific settings, in json. e.g.`jsonencode({thread_pool_search_size: 64})`. Use `exo x get-dbaas-settings-opensearch` to get a list of available settings.","description_kind":"markdown","optional":true,"computed":true},"version":{"type":"string","description":"❗ OpenSearch major version (`exo dbaas type show opensearch` for reference)","description_kind":"markdown","optional":true,"computed":true}},"block_types":{"dashboards":{"nesting_mode":"single","block":{"attributes":{"enabled":{"type":"bool","description":"Enable or disable OpenSearch Dashboards (default: true).","description_kind":"markdown","optional":true},"max_old_space_size":{"type":"number","description":"Limits the maximum amount of memory (in MiB) the OpenSearch Dashboards process can use. This sets the max_old_space_size option of the nodejs running the OpenSearch Dashboards. Note: the memory reserved by OpenSearch Dashboards is not available for OpenSearch. (default: 128).","description_kind":"markdown","optional":true},"request_timeout":{"type":"number","description":"Timeout in milliseconds for requests made by OpenSearch Dashboards towards OpenSearch (default: 30000)","description_kind":"markdown","optional":true}},"description":"OpenSearch Dashboards settings","description_kind":"markdown"}},"index_pattern":{"nesting_mode":"list","block":{"attributes":{"max_index_count":{"type":"number","description":"Maximum number of indexes to keep before deleting the oldest one (Minimum value is `0`)","description_kind":"markdown","optional":true},"pattern":{"type":"string","description":"fnmatch pattern","description_kind":"markdown","optional":true},"sorting_algorithm":{"type":"string","description":"`alphabetical` or `creation_date`.","description_kind":"markdown","optional":true}},"description":"(can be used multiple times) Allows you to create glob style patterns and set a max number of indexes matching this pattern you want to keep. Creating indexes exceeding this value will cause the oldest one to get deleted. You could for example create a pattern looking like 'logs.?' and then create index logs.1, logs.2 etc, it will delete logs.1 once you create logs.6. Do note 'logs.?' does not apply to logs.10. Note: Setting max_index_count to 0 will do nothing and the pattern gets ignored.","description_kind":"markdown"}},"index_template":{"nesting_mode":"single","block":{"attributes":{"mapping_nested_objects_limit":{"type":"number","description":"The maximum number of nested JSON objects that a single document can contain across all nested types. This limit helps to prevent out of memory errors when a document contains too many nested objects. (Default is 10000. Minimum value is `0`, maximum value is `100000`.)","description_kind":"markdown","optional":true},"number_of_replicas":{"type":"number","description":"The number of replicas each primary shard has. (Minimum value is `0`, maximum value is `29`)","description_kind":"markdown","optional":true},"number_of_shards":{"type":"number","description":"The number of primary shards that an index should have. (Minimum value is `1`, maximum value is `1024`.)","description_kind":"markdown","optional":true}},"description":"Template settings for all new indexes","description_kind":"markdown"}}},"description":"*opensearch* database service type specific arguments. Structure is documented below.","description_kind":"markdown"}},"pg":{"nesting_mode":"single","block":{"attributes":{"admin_password":{"type":"string","description":"A custom administrator account password (may only be set at creation time).","description_kind":"markdown","optional":true,"sensitive":true},"admin_username":{"type":"string","description":"A custom administrator account username (may only be set at creation time).","description_kind":"markdown","optional":true},"backup_schedule":{"type":"string","description":"The automated backup schedule (`HH:MM`).","description_kind":"markdown","optional":true,"computed":true},"ip_filter":{"type":["set","string"],"description":"A list of CIDR blocks to allow incoming connections from.","description_kind":"markdown","optional":true,"computed":true},"pg_settings":{"type":"string","description":"PostgreSQL configuration settings in JSON format (`exo dbaas type show pg --settings=pg` for reference).","description_kind":"markdown","optional":true,"computed":true},"pgbouncer_settings":{"type":"string","description":"PgBouncer configuration settings in JSON format (`exo dbaas type show pg --settings=pgbouncer` for reference).","description_kind":"markdown","optional":true,"computed":true},"pglookout_settings":{"type":"string","description":"pglookout configuration settings in JSON format (`exo dbaas type show pg --settings=pglookout` for reference).","description_kind":"markdown","optional":true,"computed":true},"version":{"type":"string","description":"PostgreSQL major version (`exo dbaas type show pg` for reference; may only be set at creation time).","description_kind":"markdown","optional":true,"computed":true}},"description":"*pg* database service type specific arguments. Structure is documented below.","description_kind":"markdown"}},"redis":{"nesting_mode":"single","block":{"attributes":{"ip_filter":{"type":["set","string"],"description":"A list of CIDR blocks to allow incoming connections from.","description_kind":"markdown","optional":true,"computed":true},"redis_settings":{"type":"string","description":"Redis configuration settings in JSON format (`exo dbaas type show redis --settings=redis` for reference).","description_kind":"markdown","optional":true,"computed":true}},"description":"*redis* database service type specific arguments. Structure is documented below.","description_kind":"markdown"}},"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},"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","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":"Manage Exoscale [Database Services (DBaaS)](https://community.exoscale.com/documentation/dbaas/).","description_kind":"markdown"}},"exoscale_domain":{"version":1,"block":{"attributes":{"auto_renew":{"type":"bool","description":"Whether the DNS domain has automatic renewal enabled (boolean).","description_kind":"markdown","deprecated":true,"computed":true},"expires_on":{"type":"string","description":"The domain expiration date, if known.","description_kind":"markdown","deprecated":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"❗ The DNS domain name.","description_kind":"markdown","required":true},"state":{"type":"string","description":"The domain state.","description_kind":"markdown","deprecated":true,"computed":true},"token":{"type":"string","description":"A security token that can be used as an alternative way to manage DNS domains via the Exoscale API.","description_kind":"markdown","deprecated":true,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale DNS Domains.","description_kind":"markdown"}},"exoscale_domain_record":{"version":1,"block":{"attributes":{"content":{"type":"string","description":"The record value.","description_kind":"markdown","required":true},"content_normalized":{"type":"string","description":"The normalized value of the record","description_kind":"markdown","computed":true},"domain":{"type":"string","description":"❗ The parent [exoscale_domain](./domain.md) to attach the record to.","description_kind":"markdown","required":true},"hostname":{"type":"string","description":"The record *Fully Qualified Domain Name* (FQDN). Useful for aliasing `A`/`AAAA` records with `CNAME`.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The record name, Leave blank (`\"\"`) to create a root record (similar to using `@` in a DNS zone file).","description_kind":"markdown","required":true},"prio":{"type":"number","description":"The record priority (for types that support it; minimum `0`).","description_kind":"markdown","optional":true,"computed":true},"record_type":{"type":"string","description":"❗ The record type (`A`, `AAAA`, `ALIAS`, `CAA`, `CNAME`, `HINFO`, `MX`, `NAPTR`, `NS`, `POOL`, `SPF`, `SRV`, `SSHFP`, `TXT`, `URL`).","description_kind":"markdown","required":true},"ttl":{"type":"number","description":"The record TTL (seconds; minimum `0`; default: `3600`).","description_kind":"markdown","optional":true,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale [DNS](https://community.exoscale.com/documentation/dns/) Domain Records.\n\nCorresponding data source: [exoscale_domain_record](../data-sources/domain_record.md).","description_kind":"markdown"}},"exoscale_elastic_ip":{"version":0,"block":{"attributes":{"address_family":{"type":"string","description":"❗ The Elastic IP (EIP) address family (`inet4` or `inet6`; default: `inet4`).","description_kind":"markdown","optional":true,"computed":true},"cidr":{"type":"string","description":"The Elastic IP (EIP) CIDR.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"A free-form text describing the Elastic IP (EIP).","description_kind":"markdown","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_address":{"type":"string","description":"The Elastic IP (EIP) IPv4 or IPv6 address.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","optional":true},"reverse_dns":{"type":"string","description":"Domain name for reverse DNS record.","description_kind":"markdown","optional":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"healthcheck":{"nesting_mode":"list","block":{"attributes":{"interval":{"type":"number","description":"The healthcheck interval (seconds; must be between `5` and `300`; default: `10`).","description_kind":"markdown","optional":true},"mode":{"type":"string","description":"The healthcheck mode (`tcp`, `http` or `https`; may only be set at creation time).","description_kind":"markdown","required":true},"port":{"type":"number","description":"The healthcheck target port (must be between `1` and `65535`).","description_kind":"markdown","required":true},"strikes_fail":{"type":"number","description":"The number of failed healthcheck attempts before considering the target unhealthy (must be between `1` and `20`; default: `2`).","description_kind":"markdown","optional":true},"strikes_ok":{"type":"number","description":"The number of successful healthcheck attempts before considering the target healthy (must be between `1` and `20`; default: `3`).","description_kind":"markdown","optional":true},"timeout":{"type":"number","description":"The time before considering a healthcheck probing failed (seconds; must be between `2` and `60`; default: `3`).","description_kind":"markdown","optional":true},"tls_skip_verify":{"type":"bool","description":"Disable TLS certificate verification for healthcheck in `https` mode (boolean; default: `false`).","description_kind":"markdown","optional":true},"tls_sni":{"type":"string","description":"The healthcheck server name to present with SNI in `https` mode.","description_kind":"markdown","optional":true},"uri":{"type":"string","description":"The healthcheck target URI (required in `http(s)` modes).","description_kind":"markdown","optional":true}},"description":"Healthcheck configuration for *managed* EIPs. It can not be added to an existing *Unmanaged* EIP.","description_kind":"markdown"},"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"exoscale_iam_access_key":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The IAM access key (identifier).","description_kind":"markdown","computed":true,"sensitive":true},"name":{"type":"string","description":"❗ The IAM access key name.","description_kind":"markdown","required":true},"operations":{"type":["set","string"],"description":"❗ A list of API operations to restrict the key to.","description_kind":"markdown","optional":true,"computed":true},"resources":{"type":["set","string"],"description":"❗ A list of API [resources](https://community.exoscale.com/documentation/iam/quick-start/#restricting-api-access-keys-to-resources) to restrict the key to (`\u003cdomain\u003e/\u003ctype\u003e:\u003cname\u003e`).","description_kind":"markdown","optional":true},"secret":{"type":"string","description":"The key secret.","description_kind":"markdown","computed":true,"sensitive":true},"tags":{"type":["set","string"],"description":"❗ A list of tags to restrict the key to.","description_kind":"markdown","optional":true},"tags_operations":{"type":["set","string"],"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},"read":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"exoscale_iam_api_key":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of this resource.","description_kind":"markdown","computed":true},"key":{"type":"string","description":"The IAM API Key to match.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"❗ IAM API Key name.","description_kind":"markdown","required":true},"role_id":{"type":"string","description":"❗ IAM API role ID.","description_kind":"markdown","required":true},"secret":{"type":"string","description":"Secret for the IAM API Key.","description_kind":"markdown","computed":true,"sensitive":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale [IAM](https://community.exoscale.com/documentation/iam/) API Key.\n","description_kind":"markdown"}},"exoscale_iam_org_policy":{"version":0,"block":{"attributes":{"default_service_strategy":{"type":"string","description":"Default service strategy (`allow` or `deny`).","description_kind":"markdown","required":true},"id":{"type":"string","description":"The ID of this resource.","description_kind":"markdown","computed":true},"services":{"nested_type":{"attributes":{"rules":{"nested_type":{"attributes":{"action":{"type":"string","description":"IAM policy rule action (`allow` or `deny`).","description_kind":"markdown","optional":true,"computed":true},"expression":{"type":"string","description":"IAM policy rule expression.","description_kind":"markdown","optional":true,"computed":true},"resources":{"type":["list","string"],"description_kind":"plain","deprecated":true,"optional":true,"computed":true}},"nesting_mode":"list"},"description":"List of IAM service rules (if type is `rules`).","description_kind":"markdown","optional":true,"computed":true},"type":{"type":"string","description":"Service type (`rules`, `allow`, or `deny`).","description_kind":"markdown","optional":true,"computed":true}},"nesting_mode":"map"},"description":"IAM policy services.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale [IAM](https://community.exoscale.com/documentation/iam/) Organization Policy.","description_kind":"markdown"}},"exoscale_iam_role":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"A free-form text describing the IAM Role","description_kind":"markdown","optional":true,"computed":true},"editable":{"type":"bool","description":"Defines if IAM Role Policy is editable or not.","description_kind":"markdown","optional":true,"computed":true},"id":{"type":"string","description":"The ID of this resource.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"IAM Role labels.","description_kind":"markdown","optional":true,"computed":true},"name":{"type":"string","description":"❗Name of IAM Role.","description_kind":"markdown","required":true},"permissions":{"type":["list","string"],"description":"IAM Role permissions.","description_kind":"markdown","optional":true,"computed":true},"policy":{"nested_type":{"attributes":{"default_service_strategy":{"type":"string","description":"Default service strategy (`allow` or `deny`).","description_kind":"markdown","optional":true,"computed":true},"services":{"nested_type":{"attributes":{"rules":{"nested_type":{"attributes":{"action":{"type":"string","description":"IAM policy rule action (`allow` or `deny`).","description_kind":"markdown","optional":true,"computed":true},"expression":{"type":"string","description":"IAM policy rule expression.","description_kind":"markdown","optional":true,"computed":true},"resources":{"type":["list","string"],"description_kind":"plain","deprecated":true,"optional":true,"computed":true}},"nesting_mode":"list"},"description":"List of IAM service rules (if type is `rules`).","description_kind":"markdown","optional":true,"computed":true},"type":{"type":"string","description":"Service type (`rules`, `allow`, or `deny`).","description_kind":"markdown","optional":true,"computed":true}},"nesting_mode":"map"},"description":"IAM policy services.","description_kind":"markdown","optional":true,"computed":true}},"nesting_mode":"single"},"description":"IAM Policy.","description_kind":"markdown","optional":true,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale [IAM](https://community.exoscale.com/documentation/iam/) Role.\n","description_kind":"markdown"}},"exoscale_instance_pool":{"version":0,"block":{"attributes":{"affinity_group_ids":{"type":["set","string"],"description":"A list of [exoscale_anti_affinity_group](./anti_affinity_group.md) (IDs; may only be set at creation time).","description_kind":"markdown","deprecated":true,"optional":true},"anti_affinity_group_ids":{"type":["set","string"],"description":"A list of [exoscale_anti_affinity_group](./anti_affinity_group.md) (IDs; may only be set at creation time).","description_kind":"markdown","optional":true},"deploy_target_id":{"type":"string","description":"A deploy target ID.","description_kind":"markdown","optional":true},"description":{"type":"string","description":"A free-form text describing the pool.","description_kind":"markdown","optional":true},"disk_size":{"type":"number","description":"The managed instances disk size (GiB).","description_kind":"markdown","optional":true,"computed":true},"elastic_ip_ids":{"type":["set","string"],"description":"A list of [exoscale_elastic_ip](./elastic_ip.md) (IDs).","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"instance_prefix":{"type":"string","description":"The string used to prefix managed instances name (default: `pool`).","description_kind":"markdown","optional":true},"instance_type":{"type":"string","description":"The managed compute instances type (`\u003cfamily\u003e.\u003csize\u003e`, e.g. `standard.medium`; use the [Exoscale CLI](https://github.com/exoscale/cli/) - `exo compute instance-type list` - for the list of available types).","description_kind":"markdown","optional":true,"computed":true},"ipv6":{"type":"bool","description":"Enable IPv6 on managed instances (boolean; default: `false`).","description_kind":"markdown","optional":true},"key_pair":{"type":"string","description":"The [exoscale_ssh_key](./ssh_key.md) (name) to authorize in the managed instances.","description_kind":"markdown","optional":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The instance pool name.","description_kind":"markdown","required":true},"network_ids":{"type":["set","string"],"description":"A list of [exoscale_private_network](./private_network.md) (IDs).","description_kind":"markdown","optional":true},"security_group_ids":{"type":["set","string"],"description":"A list of [exoscale_security_group](./security_groups.md) (IDs).","description_kind":"markdown","optional":true},"service_offering":{"type":"string","description":"The managed instances type. Please use the `instance_type` argument instead.","description_kind":"markdown","deprecated":true,"optional":true,"computed":true},"size":{"type":"number","description":"The number of managed instances.","description_kind":"markdown","required":true},"state":{"type":"string","description_kind":"plain","optional":true,"computed":true},"template_id":{"type":"string","description":"The [exoscale_template](../data-sources/template.md) (ID) to use when creating the managed instances.","description_kind":"markdown","required":true},"user_data":{"type":"string","description":"[cloud-init](http://cloudinit.readthedocs.io/) configuration to apply to the managed instances.","description_kind":"markdown","optional":true},"virtual_machines":{"type":["set","string"],"description":"The list of managed instances (IDs). Please use the `instances.*.id` attribute instead.","description_kind":"markdown","deprecated":true,"optional":true,"computed":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"instances":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true},"ipv6_address":{"type":"string","description":"The instance (main network interface) IPv6 address.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The instance name.","description_kind":"markdown","optional":true},"public_ip_address":{"type":"string","description":"The instance (main network interface) IPv4 address.","description_kind":"markdown","computed":true}},"description":"The list of managed instances. Structure is documented below.","description_kind":"markdown"}},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale [Instance Pools](https://community.exoscale.com/documentation/compute/instance-pools/).\n\nCorresponding data sources: [exoscale_instance_pool](../data-sources/instance_pool.md), [exoscale_instance_pool_list](../data-sources/instance_pool_list.md).","description_kind":"markdown"}},"exoscale_nlb":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"The NLB creation date.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"A free-form text describing the NLB.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_address":{"type":"string","description":"The NLB IPv4 address.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The network load balancer (NLB) name.","description_kind":"markdown","required":true},"services":{"type":["set","string"],"description":"The list of the [exoscale_nlb_service](./nlb_service.md) (names).","description_kind":"markdown","computed":true},"state":{"type":"string","description":"The current NLB state.","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale Network Load Balancers (NLB).","description_kind":"markdown"}},"exoscale_nlb_service":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"A free-form text describing the NLB service.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"instance_pool_id":{"type":"string","description":"❗ The [exoscale_instance_pool](./instance_pool.md) (ID) to forward traffic to.","description_kind":"markdown","required":true},"name":{"type":"string","description":"The NLB service name.","description_kind":"markdown","required":true},"nlb_id":{"type":"string","description":"❗ The parent [exoscale_nlb](./nlb.md) ID.","description_kind":"markdown","required":true},"port":{"type":"number","description":"The healthcheck port.","description_kind":"markdown","required":true},"protocol":{"type":"string","description":"The protocol (`tcp`|`udp`; default: `tcp`).","description_kind":"markdown","optional":true},"state":{"type":"string","description_kind":"plain","computed":true},"strategy":{"type":"string","description":"The strategy (`round-robin`|`source-hash`; default: `round-robin`).","description_kind":"markdown","optional":true},"target_port":{"type":"number","description":"The (TCP/UDP) port to forward traffic to (on target instance pool members).","description_kind":"markdown","required":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"healthcheck":{"nesting_mode":"set","block":{"attributes":{"interval":{"type":"number","description":"The healthcheck interval in seconds (default: `10`).","description_kind":"markdown","optional":true},"mode":{"type":"string","description":"The healthcheck mode (`tcp`|`http`|`https`; default: `tcp`).","description_kind":"markdown","optional":true},"port":{"type":"number","description":"The NLB service (TCP/UDP) port.","description_kind":"markdown","required":true},"retries":{"type":"number","description":"The healthcheck retries (default: `1`).","description_kind":"markdown","optional":true},"timeout":{"type":"number","description":"The healthcheck timeout (seconds; default: `5`).","description_kind":"markdown","optional":true},"tls_sni":{"type":"string","description":"The healthcheck TLS SNI server name (only if `mode` is `https`).","description_kind":"markdown","optional":true},"uri":{"type":"string","description":"The healthcheck URI (must be set only if `mode` is `http(s)`).","description_kind":"markdown","optional":true}},"description":"The service health checking configuration.","description_kind":"markdown"},"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},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale [Network Load Balancer (NLB)](https://community.exoscale.com/documentation/compute/network-load-balancer/) Services.","description_kind":"markdown"}},"exoscale_private_network":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"A free-form text describing the network.","description_kind":"markdown","optional":true},"end_ip":{"type":"string","description":"(For managed Privnets) The first/last IPv4 addresses used by the DHCP service for dynamic leases.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The private network name.","description_kind":"markdown","required":true},"netmask":{"type":"string","description":"(For managed Privnets) The network mask defining the IPv4 network allowed for static leases.","description_kind":"markdown","optional":true},"start_ip":{"type":"string","description":"(For managed Privnets) The first/last IPv4 addresses used by the DHCP service for dynamic leases.","description_kind":"markdown","optional":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale Private Networks.","description_kind":"markdown"}},"exoscale_security_group":{"version":1,"block":{"attributes":{"description":{"type":"string","description":"❗ A free-form text describing the group.","description_kind":"markdown","optional":true},"external_sources":{"type":["set","string"],"description":"A list of external network sources, in [CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notatio) notation.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"❗ The security group name.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale Security Groups.","description_kind":"markdown"}},"exoscale_security_group_rule":{"version":0,"block":{"attributes":{"cidr":{"type":"string","description":"❗ An (`INGRESS`) source / (`EGRESS`) destination IP subnet (in [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation)) to match (conflicts with `public_security_group`/`user_security_group`/`user_security_group_id`).","description_kind":"markdown","optional":true},"description":{"type":"string","description":"❗ A free-form text describing the security group rule.","description_kind":"markdown","optional":true},"end_port":{"type":"number","description":"❗ A `TCP`/`UDP` port range to match.","description_kind":"markdown","optional":true},"icmp_code":{"type":"number","description":"❗ An ICMP/ICMPv6 [type/code](https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Control_messages) to match.","description_kind":"markdown","optional":true},"icmp_type":{"type":"number","description":"❗ An ICMP/ICMPv6 [type/code](https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Control_messages) to match.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"protocol":{"type":"string","description":"❗ The network protocol to match (`TCP`, `UDP`, `ICMP`, `ICMPv6`, `AH`, `ESP`, `GRE`, `IPIP` or `ALL`)","description_kind":"markdown","optional":true},"public_security_group":{"type":"string","description":"❗ An (`INGRESS`) source / (`EGRESS`) destination public security group name to match (conflicts with `cidr`/`user_security_group`/`user_security_group_id`).","description_kind":"markdown","optional":true,"computed":true},"security_group":{"type":"string","description":"❗ The parent security group name. Please use the `security_group_id` argument along the [exoscale_security_group](../data-sources/security_group.md) data source instead.","description_kind":"markdown","deprecated":true,"optional":true,"computed":true},"security_group_id":{"type":"string","description":"❗ The parent [exoscale_security_group](./security_group.md) ID.","description_kind":"markdown","optional":true,"computed":true},"start_port":{"type":"number","description":"❗ A `TCP`/`UDP` port range to match.","description_kind":"markdown","optional":true},"type":{"type":"string","description":"❗ The traffic direction to match (`INGRESS` or `EGRESS`).","description_kind":"markdown","required":true},"user_security_group":{"type":"string","description":"❗ An (`INGRESS`) source / (`EGRESS`) destination security group name to match (conflicts with `cidr`/`public_security_group`/`user_security_group_id`). Please use the `user_security_group_id` argument along the [exoscale_security_group](../data-sources/security_group.md) data source instead.","description_kind":"markdown","deprecated":true,"optional":true,"computed":true},"user_security_group_id":{"type":"string","description":"❗ An (`INGRESS`) source / (`EGRESS`) destination security group ID to match (conflicts with `cidr`/`public_security_group`/`user_security_group)`).","description_kind":"markdown","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},"read":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale [Security Group](https://community.exoscale.com/documentation/compute/security-groups/) Rules.","description_kind":"markdown"}},"exoscale_sks_cluster":{"version":0,"block":{"attributes":{"addons":{"type":["set","string"],"description_kind":"plain","deprecated":true,"optional":true,"computed":true},"aggregation_ca":{"type":"string","description":"The CA certificate (in PEM format) for TLS communications between the control plane and the aggregation layer (e.g. `metrics-server`).","description_kind":"markdown","computed":true},"auto_upgrade":{"type":"bool","description":"Enable automatic upgrading of the control plane version.","description_kind":"markdown","optional":true},"cni":{"type":"string","description":"The CNI plugin that is to be used. Available options are \"calico\" or \"cilium\". Defaults to \"calico\". Setting empty string will result in a cluster with no CNI.","description_kind":"markdown","optional":true},"control_plane_ca":{"type":"string","description":"The CA certificate (in PEM format) for TLS communications between control plane components.","description_kind":"markdown","computed":true},"created_at":{"type":"string","description":"The cluster creation date.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"A free-form text describing the cluster.","description_kind":"markdown","optional":true},"endpoint":{"type":"string","description":"The cluster API endpoint.","description_kind":"markdown","computed":true},"exoscale_ccm":{"type":"bool","description":"Deploy the Exoscale [Cloud Controller Manager](https://github.com/exoscale/exoscale-cloud-controller-manager/) in the control plane (boolean; default: `true`; may only be set at creation time).","description_kind":"markdown","optional":true},"exoscale_csi":{"type":"bool","description":"Deploy the Exoscale [Container Storage Interface](https://github.com/exoscale/exoscale-csi-driver/) on worker nodes (boolean; default: `false`; requires the CCM to be enabled).","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The SKS cluster ID.","description_kind":"markdown","computed":true},"kubelet_ca":{"type":"string","description":"The CA certificate (in PEM format) for TLS communications between kubelets and the control plane.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","optional":true},"metrics_server":{"type":"bool","description":"Deploy the [Kubernetes Metrics Server](https://github.com/kubernetes-sigs/metrics-server/) in the control plane (boolean; default: `true`; may only be set at creation time).","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The SKS cluster name.","description_kind":"markdown","required":true},"nodepools":{"type":["set","string"],"description":"The list of [exoscale_sks_nodepool](./sks_nodepool.md) (IDs) attached to the cluster.","description_kind":"markdown","computed":true},"service_level":{"type":"string","description":"The service level of the control plane (`pro` or `starter`; default: `pro`; may only be set at creation time).","description_kind":"markdown","optional":true},"state":{"type":"string","description":"The cluster state.","description_kind":"markdown","computed":true},"version":{"type":"string","description":"The version of the control plane (default: latest version available from the API; see `exo compute sks versions` for reference; may only be set at creation time).","description_kind":"markdown","optional":true,"computed":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"oidc":{"nesting_mode":"list","block":{"attributes":{"client_id":{"type":"string","description":"The OpenID client ID.","description_kind":"markdown","required":true},"groups_claim":{"type":"string","description":"An OpenID JWT claim to use as the user's group.","description_kind":"markdown","optional":true},"groups_prefix":{"type":"string","description":"An OpenID prefix prepended to group claims.","description_kind":"markdown","optional":true},"issuer_url":{"type":"string","description":"The OpenID provider URL.","description_kind":"markdown","required":true},"required_claim":{"type":["map","string"],"description":"A map of key/value pairs that describes a required claim in the OpenID Token.","description_kind":"markdown","optional":true},"username_claim":{"type":"string","description":"An OpenID JWT claim to use as the user name.","description_kind":"markdown","optional":true},"username_prefix":{"type":"string","description":"An OpenID prefix prepended to username claims.","description_kind":"markdown","optional":true}},"description":"An OpenID Connect configuration to provide to the Kubernetes API server (may only be set at creation time). Structure is documented below.","description_kind":"markdown"},"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale [Scalable Kubernetes Service (SKS)](https://community.exoscale.com/documentation/sks/) Clusters.","description_kind":"markdown"}},"exoscale_sks_kubeconfig":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"❗ The parent [exoscale_sks_cluster](./sks_cluster.md) ID.","description_kind":"markdown","required":true},"early_renewal_seconds":{"type":"number","description":"If set, the resource will consider the Kubeconfig to have expired the given number of seconds before its actual CA certificate or client certificate expiry time. This can be useful to deploy an updated Kubeconfig in advance of the expiration of its internal current certificate. Note however that the old certificate remains valid until its true expiration time since this resource does not (and cannot) support revocation. Also note this advance update can only take place if the Terraform configuration is applied during the early renewal period (seconds; default: 0).","description_kind":"markdown","optional":true},"groups":{"type":["set","string"],"description":"❗ Group names in the generated Kubeconfig. The certificate present in the Kubeconfig will have these roles set in the Organization field.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kubeconfig":{"type":"string","description":"The generated Kubeconfig (YAML content).","description_kind":"markdown","computed":true,"sensitive":true},"ready_for_renewal":{"type":"bool","description_kind":"plain","computed":true},"ttl_seconds":{"type":"number","description":"❗ The Time-to-Live of the Kubeconfig, after which it will expire / become invalid (seconds; default: 2592000 = 30 days).","description_kind":"markdown","optional":true},"user":{"type":"string","description":"❗ User name in the generated Kubeconfig. The certificate present in the Kubeconfig will also have this name set for the CN field.","description_kind":"markdown","required":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale Scalable Kubernetes Service (SKS) Credentials (Kubeconfig).","description_kind":"markdown"}},"exoscale_sks_nodepool":{"version":0,"block":{"attributes":{"anti_affinity_group_ids":{"type":["set","string"],"description":"A list of [exoscale_anti_affinity_group](./anti_affinity_group.md) (IDs) to be attached to the managed instances.","description_kind":"markdown","optional":true},"cluster_id":{"type":"string","description":"❗ The parent [exoscale_sks_cluster](./sks_cluster.md) ID.","description_kind":"markdown","required":true},"created_at":{"type":"string","description":"The pool creation date.","description_kind":"markdown","computed":true},"deploy_target_id":{"type":"string","description":"A deploy target ID.","description_kind":"markdown","optional":true},"description":{"type":"string","description":"A free-form text describing the pool.","description_kind":"markdown","optional":true},"disk_size":{"type":"number","description":"The managed instances disk size (GiB; default: `50`).","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The SKS node pool ID.","description_kind":"markdown","computed":true},"instance_pool_id":{"type":"string","description":"The underlying [exoscale_instance_pool](./instance_pool.md) ID.","description_kind":"markdown","computed":true},"instance_prefix":{"type":"string","description":"The string used to prefix the managed instances name (default `pool`).","description_kind":"markdown","optional":true},"instance_type":{"type":"string","description":"The managed compute instances type (`\u003cfamily\u003e.\u003csize\u003e`, e.g. `standard.medium`; use the [Exoscale CLI](https://github.com/exoscale/cli/) - `exo compute instance-type list` - for the list of available types).","description_kind":"markdown","required":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The SKS node pool name.","description_kind":"markdown","required":true},"private_network_ids":{"type":["set","string"],"description":"A list of [exoscale_private_network](./private_network.md) (IDs) to be attached to the managed instances.","description_kind":"markdown","optional":true},"security_group_ids":{"type":["set","string"],"description":"A list of [exoscale_security_group](./security_group.md) (IDs) to be attached to the managed instances.","description_kind":"markdown","optional":true},"size":{"type":"number","description_kind":"plain","required":true},"state":{"type":"string","description":"The current pool state.","description_kind":"markdown","computed":true},"storage_lvm":{"type":"bool","description":"Create nodes with non-standard partitioning for persistent storage (requires min 100G of disk space) (may only be set at creation time).","description_kind":"markdown","optional":true},"taints":{"type":["map","string"],"description":"A map of key/value Kubernetes [taints](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) ('taints = { \u003ckey\u003e = \"\u003cvalue\u003e:\u003ceffect\u003e\" }').","description_kind":"markdown","optional":true},"template_id":{"type":"string","description":"The managed instances template ID.","description_kind":"markdown","computed":true},"version":{"type":"string","description":"The managed instances version.","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"❗ The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"kubelet_image_gc":{"nesting_mode":"set","block":{"attributes":{"high_threshold":{"type":"number","description":"The percent of disk usage after which image garbage collection is always run","description_kind":"markdown","optional":true},"low_threshold":{"type":"number","description":"The percent of disk usage before which image garbage collection is never run","description_kind":"markdown","optional":true},"min_age":{"type":"string","description":"The minimum age for an unused image before it is garbage collected (k8s duration format, eg. 1h)","description_kind":"markdown","optional":true}},"description":"Configuration for this nodepool's kubelet image garbage collector","description_kind":"markdown"}},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Manage Exoscale Scalable Kubernetes Service (SKS) Node Pools.","description_kind":"markdown"}},"exoscale_ssh_key":{"version":0,"block":{"attributes":{"fingerprint":{"type":"string","description":"The SSH key unique identifier.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"❗ The SSH key name.","description_kind":"markdown","required":true},"public_key":{"type":"string","description":"❗ The SSH *public* key that will be authorized in compute instances.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}}},"data_source_schemas":{"exoscale_anti_affinity_group":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The anti-affinity group ID to match (conflicts with `name`).","description_kind":"markdown","optional":true},"instances":{"type":["set","string"],"description":"The list of attached [exoscale_compute_instance](../resources/compute_instance.md) (IDs).","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The group name to match (conflicts with `id`).","description_kind":"markdown","optional":true}},"description":"Fetch Exoscale [Anti-Affinity Groups](https://community.exoscale.com/documentation/compute/anti-affinity-groups/) data.\n\nCorresponding resource: [exoscale_anti_affinity_group](../resources/anti_affinity_group.md).","description_kind":"markdown"}},"exoscale_block_storage_volume":{"version":0,"block":{"attributes":{"blocksize":{"type":"number","description":"Volume block size.","description_kind":"markdown","computed":true},"created_at":{"type":"string","description":"Volume creation date.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"Volume ID to match.","description_kind":"markdown","required":true},"instance":{"nested_type":{"attributes":{"id":{"type":"string","description":"Instance ID.","description_kind":"markdown","computed":true}},"nesting_mode":"single"},"description":"Volume attached instance.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"Resource labels.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"Volume name.","description_kind":"markdown","computed":true},"size":{"type":"number","description":"Volume size in GB.","description_kind":"markdown","computed":true},"snapshots":{"nested_type":{"attributes":{"id":{"type":"string","description":"Snapshot ID.","description_kind":"markdown","computed":true}},"nesting_mode":"set"},"description":"Volume snapshots.","description_kind":"markdown","computed":true},"state":{"type":"string","description":"Volume state.","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fetch [Exoscale Block Storage](https://community.exoscale.com/documentation/block-storage/) Volume.\n\nBlock Storage offers persistent externally attached volumes for your workloads.\n\nCorresponding resource: [exoscale_block_storage_volume](../resources/block_storage_volume.md).","description_kind":"markdown"}},"exoscale_block_storage_volume_snapshot":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"Snapshot creation date.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"Snapshot ID to match.","description_kind":"markdown","required":true},"labels":{"type":["map","string"],"description":"Labels.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"Snapshot name.","description_kind":"markdown","computed":true},"size":{"type":"number","description":"Snapshot size in GB.","description_kind":"markdown","computed":true},"state":{"type":"string","description":"Snapshot state.","description_kind":"markdown","computed":true},"volume":{"nested_type":{"attributes":{"id":{"type":"string","description":"Volume ID.","description_kind":"markdown","computed":true}},"nesting_mode":"single"},"description":"Block Storage Volume.","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fetch [Exoscale Block Storage](https://community.exoscale.com/documentation/block-storage/) Snapshot.\n\nBlock Storage offers persistent externally attached volumes for your workloads.\n\nCorresponding resource: [exoscale_block_storage_snapshot](../resources/block_storage_snapshot.md).","description_kind":"markdown"}},"exoscale_compute_instance":{"version":0,"block":{"attributes":{"anti_affinity_group_ids":{"type":["set","string"],"description":"The list of attached [exoscale_anti_affinity_group](../resources/anti_affinity_group.md) (IDs).","description_kind":"markdown","computed":true},"created_at":{"type":"string","description":"The compute instance creation date.","description_kind":"markdown","computed":true},"deploy_target_id":{"type":"string","description":"A deploy target ID.","description_kind":"markdown","computed":true},"disk_size":{"type":"number","description":"The instance disk size (GiB).","description_kind":"markdown","computed":true},"elastic_ip_ids":{"type":["set","string"],"description":"The list of attached [exoscale_elastic_ip](../resources/elastic_ip.md) (IDs).","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The compute instance ID to match (conflicts with `name`).","description_kind":"markdown","optional":true},"ipv6":{"type":"bool","description":"Whether IPv6 is enabled on the instance.","description_kind":"markdown","computed":true},"ipv6_address":{"type":"string","description":"The instance (main network interface) IPv6 address (if enabled).","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","computed":true},"manager_id":{"type":"string","description":"The instance manager ID, if any.","description_kind":"markdown","computed":true},"manager_type":{"type":"string","description":"The instance manager type (instance pool, SKS node pool, etc.), if any.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The instance name to match (conflicts with `id`).","description_kind":"markdown","optional":true},"private_network_ids":{"type":["set","string"],"description":"The list of attached [exoscale_private_network](../resources/private_network.md) (IDs).","description_kind":"markdown","computed":true},"public_ip_address":{"type":"string","description":"The instance (main network interface) IPv4 address.","description_kind":"markdown","computed":true},"reverse_dns":{"type":"string","description":"Domain name for reverse DNS record.","description_kind":"markdown","computed":true},"security_group_ids":{"type":["set","string"],"description":"The list of attached [exoscale_security_group](../resources/security_group.md) (IDs).","description_kind":"markdown","computed":true},"ssh_key":{"type":"string","description":"The [exoscale_ssh_key](../resources/ssh_key.md) (name) authorized on the instance.","description_kind":"markdown","computed":true},"state":{"type":"string","description":"The instance state.","description_kind":"markdown","computed":true},"template_id":{"type":"string","description":"The instance [exoscale_template](./template.md) ID.","description_kind":"markdown","computed":true},"type":{"type":"string","description":"The instance type.","description_kind":"markdown","computed":true},"user_data":{"type":"string","description":"The instance [cloud-init](http://cloudinit.readthedocs.io/en/latest/) configuration.","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"description":"Fetch Exoscale [Compute Instances](https://community.exoscale.com/documentation/compute/) data.\n\nCorresponding resource: [exoscale_compute_instance](../resources/compute_instance.md).","description_kind":"markdown"}},"exoscale_compute_instance_list":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"deploy_target_id":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"disk_size":{"type":"number","description":"Match against this int","description_kind":"markdown","optional":true},"id":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"instances":{"type":["list",["object",{"anti_affinity_group_ids":["set","string"],"created_at":"string","deploy_target_id":"string","disk_size":"number","elastic_ip_ids":["set","string"],"id":"string","ipv6":"bool","ipv6_address":"string","labels":["map","string"],"manager_id":"string","manager_type":"string","name":"string","private_network_ids":["set","string"],"public_ip_address":"string","reverse_dns":"string","security_group_ids":["set","string"],"ssh_key":"string","state":"string","template_id":"string","type":"string","user_data":"string","zone":"string"}]],"description":"The list of [exoscale_compute_instance](./compute_instance.md).","description_kind":"markdown","computed":true},"ipv6":{"type":"bool","description":"Match against this bool","description_kind":"markdown","optional":true},"ipv6_address":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"labels":{"type":["map","string"],"description":"Match against key/values. Keys are matched exactly, while values may be matched as a regex if you supply a string that begins and ends with \"/\"","description_kind":"markdown","optional":true},"manager_id":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"manager_type":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"public_ip_address":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"reverse_dns":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"ssh_key":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"state":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"template_id":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"type":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"user_data":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"description":"List Exoscale [Compute Instances](https://community.exoscale.com/documentation/compute/).\n\nCorresponding resource: [exoscale_compute_instance](../resources/compute_instance.md).","description_kind":"markdown"}},"exoscale_database_uri":{"version":0,"block":{"attributes":{"db_name":{"type":"string","description":"Default database name","description_kind":"markdown","computed":true},"host":{"type":"string","description":"Database service hostname","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The ID of this resource.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"Name of database service to match.","description_kind":"markdown","required":true},"password":{"type":"string","description":"Admin user password","description_kind":"markdown","computed":true,"sensitive":true},"port":{"type":"number","description":"Database service port","description_kind":"markdown","computed":true},"schema":{"type":"string","description":"Database service connection schema","description_kind":"markdown","computed":true},"type":{"type":"string","description":"The type of the database service (`kafka`, `mysql`, `opensearch`, `pg`, `redis`).","description_kind":"markdown","required":true},"uri":{"type":"string","description":"Database service connection URI.","description_kind":"markdown","computed":true,"sensitive":true},"username":{"type":"string","description":"Admin user username","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"The Exoscale Zone name.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fetch Exoscale [Database](https://community.exoscale.com/documentation/dbaas/) connection URI data.\n\nThis data source returns database conection details of the default (admin) user only.\n\nURI parts are also available individually for convenience.\n\nCorresponding resource: [exoscale_database](../resources/database.md).","description_kind":"markdown"}},"exoscale_domain":{"version":1,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The DNS domain name to match.","description_kind":"markdown","required":true}},"description":"Fetch Exoscale [DNS](https://community.exoscale.com/documentation/dns/) Domains data.\n\nCorresponding resource: [exoscale_domain](../resources/domain.md).","description_kind":"markdown"}},"exoscale_domain_record":{"version":1,"block":{"attributes":{"domain":{"type":"string","description":"The [exoscale_domain](./domain.md) name to match.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"records":{"type":["list",["object",{"content":"string","domain":"string","id":"string","name":"string","prio":"number","record_type":"string","ttl":"number"}]],"description":"The list of matching records. Structure is documented below.","description_kind":"markdown","computed":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"content_regex":{"type":"string","description":"A regular expression to match the record content.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The record ID to match.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The domain record name to match.","description_kind":"markdown","optional":true},"record_type":{"type":"string","description":"The record type to match.","description_kind":"markdown","optional":true}},"description":"Filter to apply when looking up domain records.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"Fetch Exoscale [DNS](https://community.exoscale.com/documentation/dns/) Domain Records data.\n\nCorresponding resource: [exoscale_domain_record](../resources/domain_record.md).","description_kind":"markdown"}},"exoscale_elastic_ip":{"version":0,"block":{"attributes":{"address_family":{"type":"string","description":"The Elastic IP (EIP) address family (`inet4` or `inet6`).","description_kind":"markdown","computed":true},"cidr":{"type":"string","description":"The Elastic IP (EIP) CIDR.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"The Elastic IP (EIP) description.","description_kind":"markdown","computed":true},"healthcheck":{"type":["list",["object",{"interval":"number","mode":"string","port":"number","strikes_fail":"number","strikes_ok":"number","timeout":"number","tls_skip_verify":"bool","tls_sni":"string","uri":"string"}]],"description":"The *managed* EIP healthcheck configuration.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The Elastic IP (EIP) ID to match (conflicts with `ip_address` and `labels`).","description_kind":"markdown","optional":true},"ip_address":{"type":"string","description":"The EIP IPv4 or IPv6 address to match (conflicts with `id` and `labels`).","description_kind":"markdown","optional":true},"labels":{"type":["map","string"],"description":"The EIP labels to match (conflicts with `ip_address` and `id`).","description_kind":"markdown","optional":true},"reverse_dns":{"type":"string","description":"Domain name for reverse DNS record.","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"The Exocale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"description":"Fetch Exoscale [Elastic IPs (EIP)](https://community.exoscale.com/documentation/compute/eip/) data.\n\nCorresponding resource: [exoscale_elastic_ip](../resources/elastic_ip.md).","description_kind":"markdown"}},"exoscale_iam_api_key":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of this resource.","description_kind":"markdown","computed":true},"key":{"type":"string","description":"The IAM API Key to match.","description_kind":"markdown","required":true},"name":{"type":"string","description":"IAM API Key name.","description_kind":"markdown","computed":true},"role_id":{"type":"string","description":"IAM API Key role ID.","description_kind":"markdown","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fetch Exoscale [IAM](https://community.exoscale.com/documentation/iam/) API Key.\n\nCorresponding resource: [exoscale_iam_role](../resources/iam_api_key.md).","description_kind":"markdown"}},"exoscale_iam_org_policy":{"version":0,"block":{"attributes":{"default_service_strategy":{"type":"string","description":"Default service strategy (`allow` or `deny`).","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The ID of this resource.","description_kind":"markdown","computed":true},"services":{"nested_type":{"attributes":{"rules":{"nested_type":{"attributes":{"action":{"type":"string","description":"IAM policy rule action (`allow` or `deny`).","description_kind":"markdown","computed":true},"expression":{"type":"string","description":"IAM policy rule expression.","description_kind":"markdown","computed":true},"resources":{"type":["list","string"],"description_kind":"plain","deprecated":true,"computed":true}},"nesting_mode":"list"},"description":"List of IAM service rules (if type is `rules`).","description_kind":"markdown","computed":true},"type":{"type":"string","description":"Service type (`rules`, `allow`, or `deny`).","description_kind":"markdown","computed":true}},"nesting_mode":"map"},"description":"IAM policy services.","description_kind":"markdown","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fetch Exoscale [IAM](https://community.exoscale.com/documentation/iam/) Organization Policy.\n\nCorresponding resource: [exoscale_iam_org_policy](../resources/iam_org_policy.md).","description_kind":"markdown"}},"exoscale_iam_role":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"A free-form text describing the IAM Role","description_kind":"markdown","computed":true},"editable":{"type":"bool","description":"Defines if IAM Role Policy is editable or not.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The role ID to match (conflicts with `name`).","description_kind":"markdown","optional":true,"computed":true},"labels":{"type":["map","string"],"description":"IAM Role labels.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"the role name to match (conflicts with `id`).","description_kind":"markdown","optional":true,"computed":true},"permissions":{"type":["list","string"],"description":"IAM Role permissions.","description_kind":"markdown","computed":true},"policy":{"nested_type":{"attributes":{"default_service_strategy":{"type":"string","description":"Default service strategy (`allow` or `deny`).","description_kind":"markdown","computed":true},"services":{"nested_type":{"attributes":{"rules":{"nested_type":{"attributes":{"action":{"type":"string","description":"IAM policy rule action (`allow` or `deny`).","description_kind":"markdown","computed":true},"expression":{"type":"string","description":"IAM policy rule expression.","description_kind":"markdown","computed":true},"resources":{"type":["list","string"],"description_kind":"plain","deprecated":true,"computed":true}},"nesting_mode":"list"},"description":"List of IAM service rules (if type is `rules`).","description_kind":"markdown","computed":true},"type":{"type":"string","description":"Service type (`rules`, `allow`, or `deny`).","description_kind":"markdown","computed":true}},"nesting_mode":"map"},"description":"IAM policy services.","description_kind":"markdown","computed":true}},"nesting_mode":"single"},"description":"IAM Policy.","description_kind":"markdown","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fetch Exoscale [IAM](https://community.exoscale.com/documentation/iam/) Role.\n\nCorresponding resource: [exoscale_iam_role](../resources/iam_role.md).","description_kind":"markdown"}},"exoscale_instance_pool":{"version":0,"block":{"attributes":{"affinity_group_ids":{"type":["set","string"],"description":"The list of attached [exoscale_anti_affinity_group](../resources/anti_affinity_group.md) (IDs). Use anti_affinity_group_ids instead.","description_kind":"markdown","deprecated":true,"computed":true},"anti_affinity_group_ids":{"type":["set","string"],"description":"The list of attached [exoscale_anti_affinity_group](../resources/anti_affinity_group.md) (IDs).","description_kind":"markdown","computed":true},"deploy_target_id":{"type":"string","description":"The deploy target ID.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"The instance pool description.","description_kind":"markdown","computed":true},"disk_size":{"type":"number","description":"The managed instances disk size.","description_kind":"markdown","computed":true},"elastic_ip_ids":{"type":["set","string"],"description":"The list of attached [exoscale_elastic_ip](../resources/elastic_ip.md) (IDs).","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The instance pool ID to match (conflicts with `name`).","description_kind":"markdown","optional":true},"instance_prefix":{"type":"string","description":"The string used to prefix the managed instances name.","description_kind":"markdown","computed":true},"instance_type":{"type":"string","description":"The managed instances type.","description_kind":"markdown","computed":true},"instances":{"type":["set",["object",{"id":"string","ipv6_address":"string","name":"string","public_ip_address":"string"}]],"description":"The list of managed instances. Structure is documented below.","description_kind":"markdown","computed":true},"ipv6":{"type":"bool","description":"Whether IPv6 is enabled on managed instances.","description_kind":"markdown","computed":true},"key_pair":{"type":"string","description":"The [exoscale_ssh_key](../resources/ssh_key.md) (name) authorized on the managed instances.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The pool name to match (conflicts with `id`).","description_kind":"markdown","optional":true},"network_ids":{"type":["set","string"],"description":"The list of attached [exoscale_private_network](../resources/private_network.md) (IDs).","description_kind":"markdown","computed":true},"security_group_ids":{"type":["set","string"],"description":"The list of attached [exoscale_security_group](../resources/security_group.md) (IDs).","description_kind":"markdown","computed":true},"size":{"type":"number","description":"The number managed instances.","description_kind":"markdown","computed":true},"state":{"type":"string","description":"The pool state.","description_kind":"markdown","computed":true},"template_id":{"type":"string","description":"The managed instances [exoscale_template](./template.md) ID.","description_kind":"markdown","computed":true},"user_data":{"type":"string","description":"[cloud-init](http://cloudinit.readthedocs.io/en/latest/) configuration.","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"description":"Fetch Exoscale [Instance Pools](https://community.exoscale.com/documentation/compute/instance-pools/) data.\n\nCorresponding resource: [exoscale_instance_pool](../resources/instance_pool.md).","description_kind":"markdown"}},"exoscale_instance_pool_list":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"pools":{"type":["list",["object",{"affinity_group_ids":["set","string"],"anti_affinity_group_ids":["set","string"],"deploy_target_id":"string","description":"string","disk_size":"number","elastic_ip_ids":["set","string"],"id":"string","instance_prefix":"string","instance_type":"string","instances":["set",["object",{"id":"string","ipv6_address":"string","name":"string","public_ip_address":"string"}]],"ipv6":"bool","key_pair":"string","labels":["map","string"],"name":"string","network_ids":["set","string"],"security_group_ids":["set","string"],"size":"number","state":"string","template_id":"string","user_data":"string","zone":"string"}]],"description":"The list of [exoscale_instance_pool](./instance_pool.md).","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"description":"List Exoscale [Instance Pools](https://community.exoscale.com/documentation/compute/instance-pools/).\n\nCorresponding resource: [exoscale_instance_pool](../resources/instance_pool.md).","description_kind":"markdown"}},"exoscale_nlb":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"The NLB creation date.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"The Network Load Balancers (NLB) description.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The Network Load Balancers (NLB) ID to match (conflicts with `name`).","description_kind":"markdown","optional":true},"ip_address":{"type":"string","description":"The NLB public IPv4 address.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The NLB name to match (conflicts with `id`).","description_kind":"markdown","optional":true},"state":{"type":"string","description":"The current NLB state.","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"description":"Fetch Exoscale [Network Load Balancers (NLB)](https://community.exoscale.com/documentation/compute/network-load-balancer/) data.\n\nCorresponding resource: [exoscale_nlb](../resources/nlb.md).","description_kind":"markdown"}},"exoscale_nlb_service_list":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of this resource.","description_kind":"markdown","computed":true},"nlb_id":{"type":"string","description":"The NLB ID to match (conflicts with `name`).","description_kind":"markdown","optional":true},"nlb_name":{"type":"string","description":"The NLB name to match (conflicts with `id`).","description_kind":"markdown","optional":true},"services":{"nested_type":{"attributes":{"description":{"type":"string","description":"NLB service description.","description_kind":"markdown","computed":true},"healthcheck":{"type":["object",{"interval":"number","mode":"string","port":"number","retries":"number","timeout":"number","tls_sni":"string","uri":"string"}],"description_kind":"plain","computed":true},"id":{"type":"string","description":"NLB service ID.","description_kind":"markdown","computed":true},"instance_pool_id":{"type":"string","description":"The [exoscale_instance_pool](./instance_pool.md) (ID) to forward traffic to.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"NLB Service name.","description_kind":"markdown","computed":true},"port":{"type":"number","description":"Port exposed on the NLB's public IP.","description_kind":"markdown","computed":true},"protocol":{"type":"string","description":"Network traffic protocol.","description_kind":"markdown","computed":true},"state":{"type":"string","description":"NLB Service State.","description_kind":"markdown","computed":true},"strategy":{"type":"string","description":"The strategy (`round-robin`|`source-hash`).","description_kind":"markdown","computed":true},"target_port":{"type":"number","description":"Port on which the network traffic will be forwarded to on the receiving instance.","description_kind":"markdown","computed":true}},"nesting_mode":"list"},"description":"The list of [exoscale_nlb_service](./nlb_service.md).","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"read":{"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). Read operations occur during any refresh or planning operation when refresh is enabled.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fetch Exoscale [Network Load Balancers (NLB)](https://community.exoscale.com/documentation/compute/network-load-balancer/) Services.\n\nCorresponding resource: [exoscale_nlb](../resources/nlb.md).","description_kind":"plain"}},"exoscale_private_network":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"The private network description.","description_kind":"markdown","optional":true},"end_ip":{"type":"string","description":"The first/last IPv4 addresses used by the DHCP service for dynamic leases.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The private network ID to match (conflicts with `name`).","description_kind":"markdown","optional":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The network name to match (conflicts with `id`).","description_kind":"markdown","optional":true},"netmask":{"type":"string","description":"The network mask defining the IPv4 network allowed for static leases.","description_kind":"markdown","computed":true},"start_ip":{"type":"string","description":"The first/last IPv4 addresses used by the DHCP service for dynamic leases.","description_kind":"markdown","computed":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"description":"Fetch Exoscale [Private Networks](https://community.exoscale.com/documentation/compute/private-networks/) data.\n\nCorresponding resource: [exoscale_private_network](../resources/private_network.md).","description_kind":"markdown"}},"exoscale_security_group":{"version":1,"block":{"attributes":{"external_sources":{"type":["set","string"],"description":"The list of external network sources, in [CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notatio) notation.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The security group ID to match (conflicts with `name`)","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name to match (conflicts with `id`)","description_kind":"markdown","optional":true}},"description":"Fetch Exoscale [Security Groups](https://community.exoscale.com/documentation/compute/security-groups/) data.\n\nCorresponding resource: [exoscale_security_group](../resources/security_group.md).","description_kind":"markdown"}},"exoscale_sks_cluster":{"version":0,"block":{"attributes":{"addons":{"type":["set","string"],"description_kind":"plain","deprecated":true,"optional":true,"computed":true},"aggregation_ca":{"type":"string","description":"The CA certificate (in PEM format) for TLS communications between the control plane and the aggregation layer (e.g. `metrics-server`).","description_kind":"markdown","optional":true,"computed":true},"auto_upgrade":{"type":"bool","description":"Enable automatic upgrading of the control plane version.","description_kind":"markdown","optional":true},"cni":{"type":"string","description":"The CNI plugin that is to be used. Available options are \"calico\" or \"cilium\". Defaults to \"calico\". Setting empty string will result in a cluster with no CNI.","description_kind":"markdown","optional":true},"control_plane_ca":{"type":"string","description":"The CA certificate (in PEM format) for TLS communications between control plane components.","description_kind":"markdown","optional":true,"computed":true},"created_at":{"type":"string","description":"The cluster creation date.","description_kind":"markdown","optional":true,"computed":true},"description":{"type":"string","description":"A free-form text describing the cluster.","description_kind":"markdown","optional":true},"endpoint":{"type":"string","description":"The cluster API endpoint.","description_kind":"markdown","optional":true,"computed":true},"exoscale_ccm":{"type":"bool","description":"Deploy the Exoscale [Cloud Controller Manager](https://github.com/exoscale/exoscale-cloud-controller-manager/) in the control plane (boolean; default: `true`; may only be set at creation time).","description_kind":"markdown","optional":true},"exoscale_csi":{"type":"bool","description":"Deploy the Exoscale [Container Storage Interface](https://github.com/exoscale/exoscale-csi-driver/) on worker nodes (boolean; default: `false`; requires the CCM to be enabled).","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true},"kubelet_ca":{"type":"string","description":"The CA certificate (in PEM format) for TLS communications between kubelets and the control plane.","description_kind":"markdown","optional":true,"computed":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","optional":true},"metrics_server":{"type":"bool","description":"Deploy the [Kubernetes Metrics Server](https://github.com/kubernetes-sigs/metrics-server/) in the control plane (boolean; default: `true`; may only be set at creation time).","description_kind":"markdown","optional":true},"name":{"type":"string","description_kind":"plain","optional":true},"nodepools":{"type":["set","string"],"description":"The list of [exoscale_sks_nodepool](./sks_nodepool.md) (IDs) attached to the cluster.","description_kind":"markdown","optional":true,"computed":true},"service_level":{"type":"string","description":"The service level of the control plane (`pro` or `starter`; default: `pro`; may only be set at creation time).","description_kind":"markdown","optional":true},"state":{"type":"string","description":"The cluster state.","description_kind":"markdown","optional":true,"computed":true},"version":{"type":"string","description":"The version of the control plane (default: latest version available from the API; see `exo compute sks versions` for reference; may only be set at creation time).","description_kind":"markdown","optional":true,"computed":true},"zone":{"type":"string","description_kind":"plain","required":true}},"block_types":{"oidc":{"nesting_mode":"list","block":{"attributes":{"client_id":{"type":"string","description":"The OpenID client ID.","description_kind":"markdown","required":true},"groups_claim":{"type":"string","description":"An OpenID JWT claim to use as the user's group.","description_kind":"markdown","optional":true},"groups_prefix":{"type":"string","description":"An OpenID prefix prepended to group claims.","description_kind":"markdown","optional":true},"issuer_url":{"type":"string","description":"The OpenID provider URL.","description_kind":"markdown","required":true},"required_claim":{"type":["map","string"],"description":"A map of key/value pairs that describes a required claim in the OpenID Token.","description_kind":"markdown","optional":true},"username_claim":{"type":"string","description":"An OpenID JWT claim to use as the user name.","description_kind":"markdown","optional":true},"username_prefix":{"type":"string","description":"An OpenID prefix prepended to username claims.","description_kind":"markdown","optional":true}},"description":"An OpenID Connect configuration to provide to the Kubernetes API server (may only be set at creation time). Structure is documented below.","description_kind":"markdown"},"max_items":1}},"description_kind":"plain"}},"exoscale_sks_cluster_list":{"version":0,"block":{"attributes":{"aggregation_ca":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"auto_upgrade":{"type":"bool","description":"Match against this bool","description_kind":"markdown","optional":true},"clusters":{"type":["list",["object",{"addons":["set","string"],"aggregation_ca":"string","auto_upgrade":"bool","cni":"string","control_plane_ca":"string","created_at":"string","description":"string","endpoint":"string","exoscale_ccm":"bool","exoscale_csi":"bool","id":"string","kubelet_ca":"string","labels":["map","string"],"metrics_server":"bool","name":"string","nodepools":["set","string"],"oidc":["list",["object",{"client_id":"string","groups_claim":"string","groups_prefix":"string","issuer_url":"string","required_claim":["map","string"],"username_claim":"string","username_prefix":"string"}]],"service_level":"string","state":"string","version":"string","zone":"string"}]],"description_kind":"plain","computed":true},"cni":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"control_plane_ca":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"created_at":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"description":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"endpoint":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"exoscale_ccm":{"type":"bool","description":"Match against this bool","description_kind":"markdown","optional":true},"exoscale_csi":{"type":"bool","description":"Match against this bool","description_kind":"markdown","optional":true},"id":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"kubelet_ca":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"labels":{"type":["map","string"],"description":"Match against key/values. Keys are matched exactly, while values may be matched as a regex if you supply a string that begins and ends with \"/\"","description_kind":"markdown","optional":true},"metrics_server":{"type":"bool","description":"Match against this bool","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"service_level":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"state":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"version":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"description_kind":"plain"}},"exoscale_sks_nodepool":{"version":0,"block":{"attributes":{"anti_affinity_group_ids":{"type":["set","string"],"description":"A list of [exoscale_anti_affinity_group](./anti_affinity_group.md) (IDs) to be attached to the managed instances.","description_kind":"markdown","optional":true},"cluster_id":{"type":"string","description_kind":"plain","required":true},"created_at":{"type":"string","description":"The pool creation date.","description_kind":"markdown","optional":true,"computed":true},"deploy_target_id":{"type":"string","description":"A deploy target ID.","description_kind":"markdown","optional":true},"description":{"type":"string","description":"A free-form text describing the pool.","description_kind":"markdown","optional":true},"disk_size":{"type":"number","description":"The managed instances disk size (GiB; default: `50`).","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true},"instance_pool_id":{"type":"string","description":"The underlying [exoscale_instance_pool](./instance_pool.md) ID.","description_kind":"markdown","optional":true,"computed":true},"instance_prefix":{"type":"string","description":"The string used to prefix the managed instances name (default `pool`).","description_kind":"markdown","optional":true},"instance_type":{"type":"string","description":"The managed compute instances type (`\u003cfamily\u003e.\u003csize\u003e`, e.g. `standard.medium`; use the [Exoscale CLI](https://github.com/exoscale/cli/) - `exo compute instance-type list` - for the list of available types).","description_kind":"markdown","optional":true},"labels":{"type":["map","string"],"description":"A map of key/value labels.","description_kind":"markdown","optional":true},"name":{"type":"string","description_kind":"plain","optional":true},"private_network_ids":{"type":["set","string"],"description":"A list of [exoscale_private_network](./private_network.md) (IDs) to be attached to the managed instances.","description_kind":"markdown","optional":true},"security_group_ids":{"type":["set","string"],"description":"A list of [exoscale_security_group](./security_group.md) (IDs) to be attached to the managed instances.","description_kind":"markdown","optional":true},"size":{"type":"number","description_kind":"plain","optional":true},"state":{"type":"string","description":"The current pool state.","description_kind":"markdown","optional":true,"computed":true},"storage_lvm":{"type":"bool","description":"Create nodes with non-standard partitioning for persistent storage (requires min 100G of disk space) (may only be set at creation time).","description_kind":"markdown","optional":true},"taints":{"type":["map","string"],"description":"A map of key/value Kubernetes [taints](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) ('taints = { \u003ckey\u003e = \"\u003cvalue\u003e:\u003ceffect\u003e\" }').","description_kind":"markdown","optional":true},"template_id":{"type":"string","description":"The managed instances template ID.","description_kind":"markdown","optional":true,"computed":true},"version":{"type":"string","description":"The managed instances version.","description_kind":"markdown","optional":true,"computed":true},"zone":{"type":"string","description_kind":"plain","required":true}},"block_types":{"kubelet_image_gc":{"nesting_mode":"set","block":{"attributes":{"high_threshold":{"type":"number","description":"The percent of disk usage after which image garbage collection is always run","description_kind":"markdown","optional":true},"low_threshold":{"type":"number","description":"The percent of disk usage before which image garbage collection is never run","description_kind":"markdown","optional":true},"min_age":{"type":"string","description":"The minimum age for an unused image before it is garbage collected (k8s duration format, eg. 1h)","description_kind":"markdown","optional":true}},"description":"Configuration for this nodepool's kubelet image garbage collector","description_kind":"markdown"}}},"description_kind":"plain"}},"exoscale_sks_nodepool_list":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"created_at":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"deploy_target_id":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"description":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"disk_size":{"type":"number","description":"Match against this int","description_kind":"markdown","optional":true},"id":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"instance_pool_id":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"instance_prefix":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"instance_type":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"labels":{"type":["map","string"],"description":"Match against key/values. Keys are matched exactly, while values may be matched as a regex if you supply a string that begins and ends with \"/\"","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"nodepools":{"type":["list",["object",{"anti_affinity_group_ids":["set","string"],"cluster_id":"string","created_at":"string","deploy_target_id":"string","description":"string","disk_size":"number","id":"string","instance_pool_id":"string","instance_prefix":"string","instance_type":"string","kubelet_image_gc":["set",["object",{"high_threshold":"number","low_threshold":"number","min_age":"string"}]],"labels":["map","string"],"name":"string","private_network_ids":["set","string"],"security_group_ids":["set","string"],"size":"number","state":"string","storage_lvm":"bool","taints":["map","string"],"template_id":"string","version":"string","zone":"string"}]],"description_kind":"plain","computed":true},"size":{"type":"number","description":"Match against this int","description_kind":"markdown","optional":true},"state":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"storage_lvm":{"type":"bool","description":"Match against this bool","description_kind":"markdown","optional":true},"taints":{"type":["map","string"],"description":"Match against key/values. Keys are matched exactly, while values may be matched as a regex if you supply a string that begins and ends with \"/\"","description_kind":"markdown","optional":true},"template_id":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"version":{"type":"string","description":"Match against this string. If you supply a string that begins and ends with a \"/\" it will be matched as a regex.","description_kind":"markdown","optional":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"description_kind":"plain"}},"exoscale_template":{"version":0,"block":{"attributes":{"default_user":{"type":"string","description":"Username to use to log into a compute instance based on this template","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The compute instance template ID to match (conflicts with `name`).","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The template name to match (conflicts with `id`) (when multiple templates have the same name, the newest one will be returned).","description_kind":"markdown","optional":true},"visibility":{"type":"string","description":"A template category filter (default: `public`); among: - `public` - official Exoscale templates - `private` - custom templates private to my organization","description_kind":"markdown","optional":true},"zone":{"type":"string","description":"The Exoscale [Zone](https://www.exoscale.com/datacenters/) name.","description_kind":"markdown","required":true}},"description":"Fetch Exoscale [Compute Instance Templates](https://community.exoscale.com/documentation/compute/custom-templates/) data.\n\nExoscale instance templates are regularly updated to include the latest updates. Whenever this happens, the template ID also changes which can lead terraform to plan the recreation of an instance. To work around this you may find [this issue](https://github.com/exoscale/terraform-provider-exoscale/issues/366) helpful.","description_kind":"markdown"}},"exoscale_zones":{"version":0,"block":{"attributes":{"zones":{"type":["list","string"],"description":"List of zones","description_kind":"plain","computed":true}},"description":"Lists all zones.","description_kind":"plain"}}}}}} diff --git a/examples-generated/null/v1alpha1/resource.yaml b/examples-generated/null/v1alpha1/resource.yaml deleted file mode 100644 index 2c0d175..0000000 --- a/examples-generated/null/v1alpha1/resource.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: null.template.upbound.io/v1alpha1 -kind: Resource -metadata: - annotations: - meta.upbound.io/example-id: null/v1alpha1/resource - labels: - testing.upbound.io/example-name: cluster - name: cluster -spec: - forProvider: - connection: - - host: ${element(aws_instance.cluster[*].public_ip, 0)} - provisioner: - remote-exec: - - inline: - - |- - bootstrap-cluster.sh ${join(" ", - aws_instance.cluster[*].private_ip)} - triggers: - cluster_instance_ids: ${join(",", aws_instance.cluster[*].id)} diff --git a/internal/controller/null/resource/zz_controller.go b/internal/controller/null/resource/zz_controller.go deleted file mode 100755 index a8ad624..0000000 --- a/internal/controller/null/resource/zz_controller.go +++ /dev/null @@ -1,87 +0,0 @@ -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -// Code generated by upjet. DO NOT EDIT. - -package resource - -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" - "github.com/crossplane/crossplane-runtime/pkg/statemetrics" - tjcontroller "github.com/crossplane/upjet/pkg/controller" - "github.com/crossplane/upjet/pkg/controller/handler" - "github.com/crossplane/upjet/pkg/terraform" - "github.com/pkg/errors" - ctrl "sigs.k8s.io/controller-runtime" - - v1alpha1 "github.com/upbound/upjet-provider-template/apis/null/v1alpha1" - features "github.com/upbound/upjet-provider-template/internal/features" -) - -// Setup adds a controller that reconciles Resource managed resources. -func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { - name := managed.ControllerName(v1alpha1.Resource_GroupVersionKind.String()) - var initializers managed.InitializerChain - cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} - if o.SecretStoreConfigGVK != nil { - cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) - } - eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Resource_GroupVersionKind))) - ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Resource_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) - opts := []managed.ReconcilerOption{ - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["null_resource"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), - tjcontroller.WithCallbackProvider(ac), - )), - managed.WithLogger(o.Logger.WithValues("controller", name)), - managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), - managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3 * time.Minute), - managed.WithInitializers(initializers), - managed.WithConnectionPublishers(cps...), - managed.WithPollInterval(o.PollInterval), - } - if o.PollJitter != 0 { - opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) - } - if o.Features.Enabled(features.EnableBetaManagementPolicies) { - opts = append(opts, managed.WithManagementPolicies()) - } - if o.MetricOptions != nil { - opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) - } - - // register webhooks for the kind v1alpha1.Resource - // if they're enabled. - if o.StartWebhooks { - if err := ctrl.NewWebhookManagedBy(mgr). - For(&v1alpha1.Resource{}). - Complete(); err != nil { - return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Resource") - } - } - - if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { - stateMetricsRecorder := statemetrics.NewMRStateRecorder( - mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.ResourceList{}, o.MetricOptions.PollStateMetricInterval, - ) - if err := mgr.Add(stateMetricsRecorder); err != nil { - return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.ResourceList") - } - } - - r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Resource_GroupVersionKind), opts...) - - return ctrl.NewControllerManagedBy(mgr). - Named(name). - WithOptions(o.ForControllerRuntime()). - WithEventFilter(xpresource.DesiredStateChanged()). - Watches(&v1alpha1.Resource{}, eventHandler). - Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) -} diff --git a/internal/controller/zz_setup.go b/internal/controller/zz_setup.go deleted file mode 100755 index c8e1ddd..0000000 --- a/internal/controller/zz_setup.go +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-FileCopyrightText: 2024 The Crossplane Authors -// -// SPDX-License-Identifier: Apache-2.0 - -package controller - -import ( - ctrl "sigs.k8s.io/controller-runtime" - - "github.com/crossplane/upjet/pkg/controller" - - resource "github.com/upbound/upjet-provider-template/internal/controller/null/resource" - providerconfig "github.com/upbound/upjet-provider-template/internal/controller/providerconfig" -) - -// Setup creates all controllers with the supplied logger and adds them to -// the supplied manager. -func Setup(mgr ctrl.Manager, o controller.Options) error { - for _, setup := range []func(ctrl.Manager, controller.Options) error{ - resource.Setup, - providerconfig.Setup, - } { - if err := setup(mgr, o); err != nil { - return err - } - } - return nil -} diff --git a/package/crds/null.template.upbound.io_resources.yaml b/package/crds/null.template.upbound.io_resources.yaml deleted file mode 100644 index 1d8b818..0000000 --- a/package/crds/null.template.upbound.io_resources.yaml +++ /dev/null @@ -1,354 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.14.0 - name: resources.null.template.upbound.io -spec: - group: null.template.upbound.io - names: - categories: - - crossplane - - managed - - template - kind: Resource - listKind: ResourceList - plural: resources - singular: resource - scope: Cluster - versions: - - additionalPrinterColumns: - - jsonPath: .status.conditions[?(@.type=='Synced')].status - name: SYNCED - type: string - - jsonPath: .status.conditions[?(@.type=='Ready')].status - name: READY - 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: Resource is the Schema for the Resources API. The null_resource - resource implements the standard resource lifecycle but takes no further - action.hashicorp. The triggers argument allows specifying an arbitrary set - of values that, when changed, will cause the resource to be replaced. - 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: ResourceSpec defines the desired state of Resource - 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: - triggers: - additionalProperties: - type: string - description: |- - running any associated provisioners. - A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners. - type: object - x-kubernetes-map-type: granular - 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: - triggers: - additionalProperties: - type: string - description: |- - running any associated provisioners. - A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners. - type: object - x-kubernetes-map-type: granular - 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 - status: - description: ResourceStatus defines the observed state of Resource. - properties: - atProvider: - properties: - id: - description: (String) This is set to a random value at create - time. - type: string - triggers: - additionalProperties: - type: string - description: |- - running any associated provisioners. - A map of arbitrary strings that, when changed, will force the null resource to be replaced, re-running any associated provisioners. - type: object - x-kubernetes-map-type: granular - 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 - observedGeneration: - description: |- - ObservedGeneration represents the .metadata.generation that the condition was set based upon. - For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date - with respect to the current state of the instance. - format: int64 - type: integer - 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 - observedGeneration: - description: |- - ObservedGeneration is the latest metadata.generation - which resulted in either a ready state, or stalled due to error - it can not recover from without human intervention. - format: int64 - type: integer - type: object - required: - - spec - type: object - served: true - storage: true - subresources: - status: {} diff --git a/package/crds/template.upbound.io_providerconfigs.yaml b/package/crds/template.upbound.io_providerconfigs.yaml deleted file mode 100644 index 1e92010..0000000 --- a/package/crds/template.upbound.io_providerconfigs.yaml +++ /dev/null @@ -1,173 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.14.0 - name: providerconfigs.template.upbound.io -spec: - group: template.upbound.io - names: - categories: - - crossplane - - provider - - template - kind: ProviderConfig - listKind: ProviderConfigList - plural: providerconfigs - singular: providerconfig - scope: Cluster - versions: - - additionalPrinterColumns: - - jsonPath: .metadata.creationTimestamp - name: AGE - type: date - - jsonPath: .spec.credentials.secretRef.name - name: SECRET-NAME - priority: 1 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - description: A ProviderConfig configures a Template provider. - 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: A ProviderConfigSpec defines the desired state of a ProviderConfig. - properties: - credentials: - description: Credentials required to authenticate to this provider. - properties: - env: - description: |- - Env is a reference to an environment variable that contains credentials - that must be used to connect to the provider. - properties: - name: - description: Name is the name of an environment variable. - type: string - required: - - name - type: object - fs: - description: |- - Fs is a reference to a filesystem location that contains credentials that - must be used to connect to the provider. - properties: - path: - description: Path is a filesystem path. - type: string - required: - - path - type: object - secretRef: - description: |- - A SecretRef is a reference to a secret key that contains the credentials - that must be used to connect to the provider. - properties: - key: - description: The key to select. - type: string - name: - description: Name of the secret. - type: string - namespace: - description: Namespace of the secret. - type: string - required: - - key - - name - - namespace - type: object - source: - description: Source of the provider credentials. - enum: - - None - - Secret - - InjectedIdentity - - Environment - - Filesystem - type: string - required: - - source - type: object - required: - - credentials - type: object - status: - description: A ProviderConfigStatus reflects the observed state of a ProviderConfig. - properties: - 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 - observedGeneration: - description: |- - ObservedGeneration represents the .metadata.generation that the condition was set based upon. - For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date - with respect to the current state of the instance. - format: int64 - type: integer - 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 - users: - description: Users of this provider configuration. - format: int64 - type: integer - type: object - required: - - spec - type: object - served: true - storage: true - subresources: - status: {} diff --git a/package/crds/template.upbound.io_providerconfigusages.yaml b/package/crds/template.upbound.io_providerconfigusages.yaml deleted file mode 100644 index 0f3d012..0000000 --- a/package/crds/template.upbound.io_providerconfigusages.yaml +++ /dev/null @@ -1,117 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.14.0 - name: providerconfigusages.template.upbound.io -spec: - group: template.upbound.io - names: - categories: - - crossplane - - provider - - template - kind: ProviderConfigUsage - listKind: ProviderConfigUsageList - plural: providerconfigusages - singular: providerconfigusage - scope: Cluster - versions: - - additionalPrinterColumns: - - jsonPath: .metadata.creationTimestamp - name: AGE - type: date - - jsonPath: .providerConfigRef.name - name: CONFIG-NAME - type: string - - jsonPath: .resourceRef.kind - name: RESOURCE-KIND - type: string - - jsonPath: .resourceRef.name - name: RESOURCE-NAME - type: string - name: v1beta1 - schema: - openAPIV3Schema: - description: A ProviderConfigUsage indicates that a resource is using a ProviderConfig. - 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 - providerConfigRef: - description: ProviderConfigReference to the provider config being used. - 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 - resourceRef: - description: ResourceReference to the managed resource using the provider - config. - properties: - apiVersion: - description: APIVersion of the referenced object. - type: string - kind: - description: Kind of the referenced object. - type: string - name: - description: Name of the referenced object. - type: string - uid: - description: UID of the referenced object. - type: string - required: - - apiVersion - - kind - - name - type: object - required: - - providerConfigRef - - resourceRef - type: object - served: true - storage: true - subresources: {} diff --git a/package/crds/template.upbound.io_storeconfigs.yaml b/package/crds/template.upbound.io_storeconfigs.yaml deleted file mode 100644 index 51731cf..0000000 --- a/package/crds/template.upbound.io_storeconfigs.yaml +++ /dev/null @@ -1,223 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.14.0 - name: storeconfigs.template.upbound.io -spec: - group: template.upbound.io - names: - categories: - - crossplane - - store - - template - kind: StoreConfig - listKind: StoreConfigList - plural: storeconfigs - singular: storeconfig - scope: Cluster - versions: - - additionalPrinterColumns: - - jsonPath: .metadata.creationTimestamp - name: AGE - type: date - - jsonPath: .spec.type - name: TYPE - type: string - - jsonPath: .spec.defaultScope - name: DEFAULT-SCOPE - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - description: A StoreConfig configures how template controller should store - connection details. - 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: A StoreConfigSpec defines the desired state of a ProviderConfig. - properties: - defaultScope: - description: |- - DefaultScope used for scoping secrets for "cluster-scoped" resources. - If store type is "Kubernetes", this would mean the default namespace to - store connection secrets for cluster scoped resources. - In case of "Vault", this would be used as the default parent path. - Typically, should be set as Crossplane installation namespace. - type: string - kubernetes: - description: |- - Kubernetes configures a Kubernetes secret store. - If the "type" is "Kubernetes" but no config provided, in cluster config - will be used. - properties: - auth: - description: Credentials used to connect to the Kubernetes API. - properties: - env: - description: |- - Env is a reference to an environment variable that contains credentials - that must be used to connect to the provider. - properties: - name: - description: Name is the name of an environment variable. - type: string - required: - - name - type: object - fs: - description: |- - Fs is a reference to a filesystem location that contains credentials that - must be used to connect to the provider. - properties: - path: - description: Path is a filesystem path. - type: string - required: - - path - type: object - secretRef: - description: |- - A SecretRef is a reference to a secret key that contains the credentials - that must be used to connect to the provider. - properties: - key: - description: The key to select. - type: string - name: - description: Name of the secret. - type: string - namespace: - description: Namespace of the secret. - type: string - required: - - key - - name - - namespace - type: object - source: - description: Source of the credentials. - enum: - - None - - Secret - - Environment - - Filesystem - type: string - required: - - source - type: object - required: - - auth - type: object - plugin: - description: Plugin configures External secret store as a plugin. - properties: - configRef: - description: ConfigRef contains store config reference info. - properties: - apiVersion: - description: APIVersion of the referenced config. - type: string - kind: - description: Kind of the referenced config. - type: string - name: - description: Name of the referenced config. - type: string - required: - - apiVersion - - kind - - name - type: object - endpoint: - description: Endpoint is the endpoint of the gRPC server. - type: string - type: object - type: - default: Kubernetes - description: |- - Type configures which secret store to be used. Only the configuration - block for this store will be used and others will be ignored if provided. - Default is Kubernetes. - enum: - - Kubernetes - - Vault - - Plugin - type: string - required: - - defaultScope - type: object - status: - description: A StoreConfigStatus represents the status of a StoreConfig. - properties: - 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 - observedGeneration: - description: |- - ObservedGeneration represents the .metadata.generation that the condition was set based upon. - For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date - with respect to the current state of the instance. - format: int64 - type: integer - 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: {}