From 0bd397545e2a62549260c4b00580e839d03c21ff Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 1 Oct 2022 22:39:07 -0400 Subject: [PATCH 1/6] fix terraform provider extraction in controller image Signed-off-by: Marques Johansson --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index c145172..6b1c869 100644 --- a/Makefile +++ b/Makefile @@ -5,13 +5,13 @@ PROJECT_NAME := provider-jet-equinix PROJECT_REPO := github.com/crossplane-contrib/$(PROJECT_NAME) GOLANGCILINT_VERSION ?= 1.48.0 -export TERRAFORM_VERSION := 1.2.9 +export TERRAFORM_VERSION := 1.3.1 export TERRAFORM_PROVIDER_SOURCE := equinix/equinix -export TERRAFORM_PROVIDER_VERSION := 1.9.0 +export TERRAFORM_PROVIDER_VERSION := 1.10.0 export TERRAFORM_PROVIDER_DOWNLOAD_NAME := terraform-provider-equinix -export TERRAFORM_PROVIDER_DOWNLOAD_URL_PREFIX := https://releases.hashicorp.com/terraform-provider-equinix/1.9.0 -#export TERRAFORM_NATIVE_PROVIDER_BINARY := terraform-provider-null_v3.1.0_x5 +export TERRAFORM_PROVIDER_DOWNLOAD_URL_PREFIX := https://releases.hashicorp.com/${TERRAFORM_PROVIDER_DOWNLOAD_NAME}/${TERRAFORM_PROVIDER_VERSION} +export TERRAFORM_NATIVE_PROVIDER_BINARY := ${TERRAFORM_PROVIDER_DOWNLOAD_NAME}_v${TERRAFORM_PROVIDER_VERSION} PLATFORMS ?= linux_amd64 linux_arm64 From 34c50f6d2f708d7cce66d54ce86150f9e096aaae Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 1 Oct 2022 22:50:13 -0400 Subject: [PATCH 2/6] regenerate with Equinix provider 1.10 Signed-off-by: Marques Johansson --- apis/metal/v1alpha1/zz_generated.deepcopy.go | 190 +++++++++++++ apis/metal/v1alpha1/zz_generated.managed.go | 66 +++++ .../v1alpha1/zz_generated.managedlist.go | 9 + .../v1alpha1/zz_generated_terraformed.go | 74 +++++ .../v1alpha1/zz_organizationmember_types.go | 112 ++++++++ config/schema.json | 2 +- .../metal/organizationmember/zz_controller.go | 60 +++++ internal/controller/zz_setup.go | 2 + ...jet.crossplane.io_organizationmembers.yaml | 255 ++++++++++++++++++ 9 files changed, 769 insertions(+), 1 deletion(-) create mode 100755 apis/metal/v1alpha1/zz_organizationmember_types.go create mode 100755 internal/controller/metal/organizationmember/zz_controller.go create mode 100644 package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml diff --git a/apis/metal/v1alpha1/zz_generated.deepcopy.go b/apis/metal/v1alpha1/zz_generated.deepcopy.go index d89377c..ae97f7e 100644 --- a/apis/metal/v1alpha1/zz_generated.deepcopy.go +++ b/apis/metal/v1alpha1/zz_generated.deepcopy.go @@ -1722,6 +1722,196 @@ func (in *OrganizationList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OrganizationMember) DeepCopyInto(out *OrganizationMember) { + *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 OrganizationMember. +func (in *OrganizationMember) DeepCopy() *OrganizationMember { + if in == nil { + return nil + } + out := new(OrganizationMember) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OrganizationMember) 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 *OrganizationMemberList) DeepCopyInto(out *OrganizationMemberList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]OrganizationMember, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrganizationMemberList. +func (in *OrganizationMemberList) DeepCopy() *OrganizationMemberList { + if in == nil { + return nil + } + out := new(OrganizationMemberList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OrganizationMemberList) 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 *OrganizationMemberObservation) DeepCopyInto(out *OrganizationMemberObservation) { + *out = *in + if in.Created != nil { + in, out := &in.Created, &out.Created + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.InvitedBy != nil { + in, out := &in.InvitedBy, &out.InvitedBy + *out = new(string) + **out = **in + } + if in.Nonce != nil { + in, out := &in.Nonce, &out.Nonce + *out = new(string) + **out = **in + } + if in.State != nil { + in, out := &in.State, &out.State + *out = new(string) + **out = **in + } + if in.Updated != nil { + in, out := &in.Updated, &out.Updated + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrganizationMemberObservation. +func (in *OrganizationMemberObservation) DeepCopy() *OrganizationMemberObservation { + if in == nil { + return nil + } + out := new(OrganizationMemberObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OrganizationMemberParameters) DeepCopyInto(out *OrganizationMemberParameters) { + *out = *in + if in.Invitee != nil { + in, out := &in.Invitee, &out.Invitee + *out = new(string) + **out = **in + } + if in.Message != nil { + in, out := &in.Message, &out.Message + *out = new(string) + **out = **in + } + if in.OrganizationID != nil { + in, out := &in.OrganizationID, &out.OrganizationID + *out = new(string) + **out = **in + } + if in.ProjectsIds != nil { + in, out := &in.ProjectsIds, &out.ProjectsIds + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Roles != nil { + in, out := &in.Roles, &out.Roles + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrganizationMemberParameters. +func (in *OrganizationMemberParameters) DeepCopy() *OrganizationMemberParameters { + if in == nil { + return nil + } + out := new(OrganizationMemberParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OrganizationMemberSpec) DeepCopyInto(out *OrganizationMemberSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrganizationMemberSpec. +func (in *OrganizationMemberSpec) DeepCopy() *OrganizationMemberSpec { + if in == nil { + return nil + } + out := new(OrganizationMemberSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OrganizationMemberStatus) DeepCopyInto(out *OrganizationMemberStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrganizationMemberStatus. +func (in *OrganizationMemberStatus) DeepCopy() *OrganizationMemberStatus { + if in == nil { + return nil + } + out := new(OrganizationMemberStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OrganizationObservation) DeepCopyInto(out *OrganizationObservation) { *out = *in diff --git a/apis/metal/v1alpha1/zz_generated.managed.go b/apis/metal/v1alpha1/zz_generated.managed.go index 02e3148..3935e70 100644 --- a/apis/metal/v1alpha1/zz_generated.managed.go +++ b/apis/metal/v1alpha1/zz_generated.managed.go @@ -481,6 +481,72 @@ func (mg *Organization) SetWriteConnectionSecretToReference(r *xpv1.SecretRefere mg.Spec.WriteConnectionSecretToReference = r } +// GetCondition of this OrganizationMember. +func (mg *OrganizationMember) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this OrganizationMember. +func (mg *OrganizationMember) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetProviderConfigReference of this OrganizationMember. +func (mg *OrganizationMember) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +/* +GetProviderReference of this OrganizationMember. +Deprecated: Use GetProviderConfigReference. +*/ +func (mg *OrganizationMember) GetProviderReference() *xpv1.Reference { + return mg.Spec.ProviderReference +} + +// GetPublishConnectionDetailsTo of this OrganizationMember. +func (mg *OrganizationMember) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this OrganizationMember. +func (mg *OrganizationMember) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this OrganizationMember. +func (mg *OrganizationMember) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this OrganizationMember. +func (mg *OrganizationMember) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetProviderConfigReference of this OrganizationMember. +func (mg *OrganizationMember) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +/* +SetProviderReference of this OrganizationMember. +Deprecated: Use SetProviderConfigReference. +*/ +func (mg *OrganizationMember) SetProviderReference(r *xpv1.Reference) { + mg.Spec.ProviderReference = r +} + +// SetPublishConnectionDetailsTo of this OrganizationMember. +func (mg *OrganizationMember) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this OrganizationMember. +func (mg *OrganizationMember) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} + // GetCondition of this Port. func (mg *Port) GetCondition(ct xpv1.ConditionType) xpv1.Condition { return mg.Status.GetCondition(ct) diff --git a/apis/metal/v1alpha1/zz_generated.managedlist.go b/apis/metal/v1alpha1/zz_generated.managedlist.go index 4e45507..0b4088a 100644 --- a/apis/metal/v1alpha1/zz_generated.managedlist.go +++ b/apis/metal/v1alpha1/zz_generated.managedlist.go @@ -82,6 +82,15 @@ func (l *OrganizationList) GetItems() []resource.Managed { return items } +// GetItems of this OrganizationMemberList. +func (l *OrganizationMemberList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} + // GetItems of this PortList. func (l *PortList) GetItems() []resource.Managed { items := make([]resource.Managed, len(l.Items)) diff --git a/apis/metal/v1alpha1/zz_generated_terraformed.go b/apis/metal/v1alpha1/zz_generated_terraformed.go index bf12337..82e4baa 100755 --- a/apis/metal/v1alpha1/zz_generated_terraformed.go +++ b/apis/metal/v1alpha1/zz_generated_terraformed.go @@ -545,6 +545,80 @@ func (tr *Organization) GetTerraformSchemaVersion() int { return 0 } +// GetTerraformResourceType returns Terraform resource type for this OrganizationMember +func (mg *OrganizationMember) GetTerraformResourceType() string { + return "equinix_metal_organization_member" +} + +// GetConnectionDetailsMapping for this OrganizationMember +func (tr *OrganizationMember) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this OrganizationMember +func (tr *OrganizationMember) GetObservation() (map[string]interface{}, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]interface{}{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this OrganizationMember +func (tr *OrganizationMember) SetObservation(obs map[string]interface{}) 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 OrganizationMember +func (tr *OrganizationMember) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this OrganizationMember +func (tr *OrganizationMember) GetParameters() (map[string]interface{}, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]interface{}{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this OrganizationMember +func (tr *OrganizationMember) SetParameters(params map[string]interface{}) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// LateInitialize this OrganizationMember using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *OrganizationMember) LateInitialize(attrs []byte) (bool, error) { + params := &OrganizationMemberParameters{} + 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 *OrganizationMember) GetTerraformSchemaVersion() int { + return 0 +} + // GetTerraformResourceType returns Terraform resource type for this Port func (mg *Port) GetTerraformResourceType() string { return "equinix_metal_port" diff --git a/apis/metal/v1alpha1/zz_organizationmember_types.go b/apis/metal/v1alpha1/zz_organizationmember_types.go new file mode 100755 index 0000000..efe4a3d --- /dev/null +++ b/apis/metal/v1alpha1/zz_organizationmember_types.go @@ -0,0 +1,112 @@ +/* +Copyright 2021 The Crossplane Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by terrajet. 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 OrganizationMemberObservation struct { + Created *string `json:"created,omitempty" tf:"created,omitempty"` + + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + InvitedBy *string `json:"invitedBy,omitempty" tf:"invited_by,omitempty"` + + Nonce *string `json:"nonce,omitempty" tf:"nonce,omitempty"` + + State *string `json:"state,omitempty" tf:"state,omitempty"` + + Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` +} + +type OrganizationMemberParameters struct { + + // The email address of the user to invite + // +kubebuilder:validation:Required + Invitee *string `json:"invitee" tf:"invitee,omitempty"` + + // A message to the invitee (only used during the invitation stage) + // +kubebuilder:validation:Optional + Message *string `json:"message,omitempty" tf:"message,omitempty"` + + // The organization to invite the user to + // +kubebuilder:validation:Required + OrganizationID *string `json:"organizationId" tf:"organization_id,omitempty"` + + // Project IDs the member has access to within the organization. If the member is an 'owner', the projects list should be empty. + // +kubebuilder:validation:Required + ProjectsIds []*string `json:"projectsIds" tf:"projects_ids,omitempty"` + + // Organization roles (owner, collaborator, limited_collaborator, billing) + // +kubebuilder:validation:Required + Roles []*string `json:"roles" tf:"roles,omitempty"` +} + +// OrganizationMemberSpec defines the desired state of OrganizationMember +type OrganizationMemberSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider OrganizationMemberParameters `json:"forProvider"` +} + +// OrganizationMemberStatus defines the observed state of OrganizationMember. +type OrganizationMemberStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider OrganizationMemberObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true + +// OrganizationMember is the Schema for the OrganizationMembers API +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:subresource:status +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinixjet} +type OrganizationMember struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + Spec OrganizationMemberSpec `json:"spec"` + Status OrganizationMemberStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// OrganizationMemberList contains a list of OrganizationMembers +type OrganizationMemberList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []OrganizationMember `json:"items"` +} + +// Repository type metadata. +var ( + OrganizationMember_Kind = "OrganizationMember" + OrganizationMember_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: OrganizationMember_Kind}.String() + OrganizationMember_KindAPIVersion = OrganizationMember_Kind + "." + CRDGroupVersion.String() + OrganizationMember_GroupVersionKind = CRDGroupVersion.WithKind(OrganizationMember_Kind) +) + +func init() { + SchemeBuilder.Register(&OrganizationMember{}, &OrganizationMemberList{}) +} diff --git a/config/schema.json b/config/schema.json index 6865f1b..958d49a 100644 --- a/config/schema.json +++ b/config/schema.json @@ -1 +1 @@ -{"format_version":"1.0","provider_schemas":{"registry.terraform.io/equinix/equinix":{"provider":{"version":0,"block":{"attributes":{"auth_token":{"type":"string","description":"The Equinix Metal API auth key for API operations","description_kind":"plain","optional":true},"client_id":{"type":"string","description":"API Consumer Key available under My Apps section in developer portal","description_kind":"plain","optional":true},"client_secret":{"type":"string","description":"API Consumer secret available under My Apps section in developer portal","description_kind":"plain","optional":true},"endpoint":{"type":"string","description":"The Equinix API base URL to point out desired environment. Defaults to https://api.equinix.com","description_kind":"plain","optional":true},"max_retries":{"type":"number","description_kind":"plain","optional":true},"max_retry_wait_seconds":{"type":"number","description_kind":"plain","optional":true},"request_timeout":{"type":"number","description":"The duration of time, in seconds, that the Equinix Platform API Client should wait before canceling an API request. Defaults to 30","description_kind":"plain","optional":true},"response_max_page_size":{"type":"number","description":"The maximum number of records in a single response for REST queries that produce paginated responses","description_kind":"plain","optional":true},"token":{"type":"string","description":"API token from the developer sandbox","description_kind":"plain","optional":true}},"description_kind":"plain"}},"resource_schemas":{"equinix_ecx_l2_connection":{"version":0,"block":{"attributes":{"actions":{"type":["set",["object",{"message":"string","operation_id":"string","required_data":["set",["object",{"editable":"bool","key":"string","label":"string","validation_pattern":"string","value":"string"}]],"type":"string"}]],"description":"One or more pending actions to complete connection provisioning","description_kind":"plain","computed":true},"authorization_key":{"type":"string","description":"Text field used to authorize connection on the provider side. Value depends on a provider service profile used for connection","description_kind":"plain","optional":true,"computed":true},"device_interface_id":{"type":"number","description":"Identifier of network interface on a given device, used for a connection. If not specified then first available interface will be selected","description_kind":"plain","optional":true},"device_uuid":{"type":"string","description":"Unique identifier of the Network Edge virtual device from which the connection would originate","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","required":true},"named_tag":{"type":"string","description":"The type of peering to set up in case when connecting to Azure Express Route. One of PRIVATE, MICROSOFT, MANUAL, PUBLIC (MANUAL and PUBLIC are deprecated and not available for new connections)","description_kind":"plain","optional":true},"notifications":{"type":["set","string"],"description":"A list of email addresses used for sending connection update notifications","description_kind":"plain","required":true},"port_uuid":{"type":"string","description":"Unique identifier of the buyer's port from which the connection would originate","description_kind":"plain","optional":true,"computed":true},"profile_uuid":{"type":"string","description":"Unique identifier of the service provider's service profile","description_kind":"plain","optional":true,"computed":true},"provider_status":{"type":"string","description":"Connection provisioning status on service provider's side","description_kind":"plain","computed":true},"purchase_order_number":{"type":"string","description":"Connection's purchase order number to reflect on the invoice","description_kind":"plain","optional":true},"redundancy_group":{"type":"string","description":"Unique identifier of group containing a primary and secondary connection","description_kind":"plain","computed":true},"redundancy_type":{"type":"string","description":"Connection redundancy type, applicable for HA connections. Either primary or secondary","description_kind":"plain","computed":true},"redundant_uuid":{"type":"string","description":"Unique identifier of the redundant connection, applicable for HA connections","description_kind":"plain","computed":true},"seller_metro_code":{"type":"string","description":"The metro code that denotes the connection's remote side (z-side)","description_kind":"plain","optional":true,"computed":true},"seller_region":{"type":"string","description":"The region in which the seller port resides","description_kind":"plain","optional":true},"service_token":{"type":"string","description":"Unique Equinix Fabric key given by a provider that grants you authorization to enable connectivity from a shared multi-tenant port (a-side)","description_kind":"plain","optional":true},"speed":{"type":"number","description":"Speed/Bandwidth to be allocated to the connection","description_kind":"plain","required":true},"speed_unit":{"type":"string","description":"Unit of the speed/bandwidth to be allocated to the connection","description_kind":"plain","required":true},"status":{"type":"string","description":"Connection provisioning status on Equinix Fabric side","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Unique identifier of the connection","description_kind":"plain","computed":true},"vendor_token":{"type":"string","description":"The Equinix Fabric Token the connection was created with. Applicable if the connection was created with a ServiceToken (a-side) or ZSideServiceToken (z-side)","description_kind":"plain","computed":true},"vlan_ctag":{"type":"number","description":"C-Tag/Inner-Tag of the connection, a numeric character ranging from 2 - 4094","description_kind":"plain","optional":true},"vlan_stag":{"type":"number","description":"S-Tag/Outer-Tag of the connection, a numeric character ranging from 2 - 4094","description_kind":"plain","optional":true,"computed":true},"zside_port_uuid":{"type":"string","description":"Unique identifier of the port on the remote side (z-side)","description_kind":"plain","optional":true,"computed":true},"zside_service_token":{"type":"string","description":"Unique Equinix Fabric key given by a provider that grants you authorization to enable connectivity to a shared multi-tenant port (z-side)","description_kind":"plain","optional":true},"zside_vlan_ctag":{"type":"number","description":"C-Tag/Inner-Tag of the connection on the remote side (z-side)","description_kind":"plain","optional":true,"computed":true},"zside_vlan_stag":{"type":"number","description":"S-Tag/Outer-Tag of the connection on the remote side (z-side)","description_kind":"plain","optional":true,"computed":true}},"block_types":{"additional_info":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description":"Additional information key","description_kind":"plain","required":true},"value":{"type":"string","description":"Additional information value","description_kind":"plain","required":true}},"description":"One or more additional information key-value objects","description_kind":"plain"}},"secondary_connection":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["set",["object",{"message":"string","operation_id":"string","required_data":["set",["object",{"editable":"bool","key":"string","label":"string","validation_pattern":"string","value":"string"}]],"type":"string"}]],"description":"One or more pending actions to complete connection provisioning","description_kind":"plain","computed":true},"authorization_key":{"type":"string","description":"Text field used to authorize connection on the provider side. Value depends on a provider service profile used for connection","description_kind":"plain","optional":true,"computed":true},"device_interface_id":{"type":"number","description":"Identifier of network interface on a given device, used for a connection. If not specified then first available interface will be selected","description_kind":"plain","optional":true,"computed":true},"device_uuid":{"type":"string","description":"Unique identifier of the Network Edge virtual device from which the connection would originate","description_kind":"plain","optional":true},"name":{"type":"string","description":"Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","required":true},"port_uuid":{"type":"string","description":"Unique identifier of the buyer's port from which the connection would originate","description_kind":"plain","optional":true,"computed":true},"profile_uuid":{"type":"string","description":"Unique identifier of the service provider's service profile","description_kind":"plain","optional":true,"computed":true},"provider_status":{"type":"string","description":"Connection provisioning status on service provider's side","description_kind":"plain","computed":true},"redundancy_group":{"type":"string","description":"Unique identifier of group containing a primary and secondary connection","description_kind":"plain","computed":true},"redundancy_type":{"type":"string","description":"Connection redundancy type, applicable for HA connections. Either primary or secondary","description_kind":"plain","computed":true},"redundant_uuid":{"type":"string","description":"Unique identifier of the redundant connection, applicable for HA connections","description_kind":"plain","deprecated":true,"computed":true},"seller_metro_code":{"type":"string","description":"The metro code that denotes the connection's remote side (z-side)","description_kind":"plain","optional":true,"computed":true},"seller_region":{"type":"string","description":"The region in which the seller port resides","description_kind":"plain","optional":true,"computed":true},"service_token":{"type":"string","description":"Unique Equinix Fabric key given by a provider that grants you authorization to enable connectivity from a shared multi-tenant port (a-side)","description_kind":"plain","optional":true},"speed":{"type":"number","description":"Speed/Bandwidth to be allocated to the connection","description_kind":"plain","optional":true,"computed":true},"speed_unit":{"type":"string","description":"Unit of the speed/bandwidth to be allocated to the connection","description_kind":"plain","optional":true,"computed":true},"status":{"type":"string","description":"Connection provisioning status on Equinix Fabric side","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Unique identifier of the connection","description_kind":"plain","computed":true},"vendor_token":{"type":"string","description":"The Equinix Fabric Token the connection was created with. Applicable if the connection was created with a ServiceToken (a-side) or ZSideServiceToken (z-side)","description_kind":"plain","computed":true},"vlan_ctag":{"type":"number","description":"C-Tag/Inner-Tag of the connection, a numeric character ranging from 2 - 4094","description_kind":"plain","optional":true},"vlan_stag":{"type":"number","description":"S-Tag/Outer-Tag of the connection, a numeric character ranging from 2 - 4094","description_kind":"plain","optional":true,"computed":true},"zside_port_uuid":{"type":"string","description":"Unique identifier of the port on the remote side (z-side)","description_kind":"plain","computed":true},"zside_vlan_ctag":{"type":"number","description":"C-Tag/Inner-Tag of the connection on the remote side (z-side)","description_kind":"plain","computed":true},"zside_vlan_stag":{"type":"number","description":"S-Tag/Outer-Tag of the connection on the remote side (z-side)","description_kind":"plain","computed":true}},"description":"Definition of secondary connection for redundant, HA connectivity","description_kind":"plain"},"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}},"description_kind":"plain"}}},"description":"Resource allows creation and management of Equinix Fabric\tlayer 2 connections","description_kind":"plain"}},"equinix_ecx_l2_connection_accepter":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"Access Key used to accept connection on provider side","description_kind":"plain","optional":true,"computed":true,"sensitive":true},"aws_connection_id":{"type":"string","description":"Identifier of a hosted Direct Connect connection on AWS side, applicable for accepter resource with connections to AWS only","description_kind":"plain","computed":true},"aws_profile":{"type":"string","description":"AWS Profile Name for retrieving credentials from shared credentials file","description_kind":"plain","optional":true},"connection_id":{"type":"string","description":"Identifier of layer 2 connection that will be accepted","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"secret_key":{"type":"string","description":"Secret Key used to accept connection on provider side","description_kind":"plain","optional":true,"computed":true,"sensitive":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Resource is used to accept Equinix Fabric layer 2 connection on provider side","description_kind":"plain","deprecated":true}},"equinix_ecx_l2_serviceprofile":{"version":0,"block":{"attributes":{"api_integration":{"type":"bool","description":"Specifies the API integration ID that was provided to the customer during onboarding","description_kind":"plain","optional":true},"authkey_label":{"type":"string","description":"Name of the authentication key label to be used by the Authentication Key service","description_kind":"plain","optional":true},"bandwidth_alert_threshold":{"type":"number","description":"Specifies the port bandwidth threshold percentage. If the bandwidth limit is met or exceeded, an alert is sent to the seller","description_kind":"plain","optional":true},"bandwidth_threshold_notifications":{"type":["set","string"],"description":"A list of email addresses that will receive notifications about bandwidth thresholds","description_kind":"plain","required":true},"connection_name_label":{"type":"string","description":"Custom name used for calling a connections i.e. circuit. Defaults to Connection","description_kind":"plain","optional":true},"ctag_label":{"type":"string","description":"C-Tag/Inner-Tag label name for the connections","description_kind":"plain","optional":true},"description":{"type":"string","description":"Description of the service profile","description_kind":"plain","optional":true},"equinix_managed_port_vlan":{"type":"bool","description":"Boolean value that indicates whether the port and VLAN details are managed by Equinix","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"integration_id":{"type":"string","description":"Specifies the API integration ID that was provided to the customer during onboarding","description_kind":"plain","optional":true},"name":{"type":"string","description":"Name of the service profile. An alpha-numeric 50 characters string which can include only hyphens and underscores","description_kind":"plain","required":true},"oversubscription":{"type":"string","description":"Oversubscription limit that will cause alerting. Default is 1x","description_kind":"plain","optional":true},"oversubscription_allowed":{"type":"bool","description":"Boolean value that determines if, regardless of the utilization, Equinix Fabric will continue to add connections to your links until we reach the oversubscription limit","description_kind":"plain","optional":true},"private":{"type":"bool","description":"Boolean value that indicates whether or not this is a private profile.","description_kind":"plain","optional":true},"private_user_emails":{"type":["set","string"],"description":"A list of email addresses associated to users that will be allowed to access this service profile. Applicable for private profiles","description_kind":"plain","optional":true},"profile_statuschange_notifications":{"type":["set","string"],"description":"A list of email addresses that will receive notifications about profile status changes","description_kind":"plain","required":true},"redundancy_required":{"type":"bool","description":"Boolean value that determines if yourconnections will require redundancy","description_kind":"plain","optional":true},"secondary_vlan_from_primary":{"type":"bool","description":"Indicates whether the VLAN ID of the secondary connection is the same as the primary connection","description_kind":"plain","optional":true},"servicekey_autogenerated":{"type":"bool","description":"Boolean value that indicates whether multiple connections can be created with the same authorization key","description_kind":"plain","optional":true},"speed_customization_allowed":{"type":"bool","description":"Boolean value that determines if customer is allowed to enter a custom connection speed","description_kind":"plain","optional":true},"speed_from_api":{"type":"bool","description":"Boolean valuta that determines if connection speed will be derived from an API call","description_kind":"plain","optional":true},"state":{"type":"string","description":"Service profile provisioning status","description_kind":"plain","computed":true},"tag_type":{"type":"string","description":"Specifies additional tagging information required by the seller profile for Dot1Q to QinQ translation","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Unique identifier of the service profile","description_kind":"plain","computed":true},"vc_statuschange_notifications":{"type":["set","string"],"description":"A list of email addresses that will receive notifications about connections approvals and rejections","description_kind":"plain","required":true}},"block_types":{"features":{"nesting_mode":"set","block":{"attributes":{"allow_remote_connections":{"type":"bool","description":"Indicates whether or not connections to this profile can be created from remote metro locations","description_kind":"plain","required":true},"test_profile":{"type":"bool","description":"Indicates whether or not this profile can be used for test connections","description_kind":"plain","deprecated":true,"optional":true}},"description":"Block of profile features configuration","description_kind":"plain"},"min_items":1,"max_items":1},"port":{"nesting_mode":"set","block":{"attributes":{"metro_code":{"type":"string","description":"Port location metro code","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Unique identifier of the port","description_kind":"plain","required":true}},"description":"One or more definitions of ports associated with the profile","description_kind":"plain"},"min_items":1},"speed_band":{"nesting_mode":"set","block":{"attributes":{"speed":{"type":"number","description":"Speed/bandwidth supported by given service profile","description_kind":"plain","required":true},"speed_unit":{"type":"string","description":"Unit of the speed/bandwidth supported by given service profile","description_kind":"plain","required":true}},"description":"One or more definitions of supported speed/bandwidth configurations","description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_bgp_session":{"version":0,"block":{"attributes":{"address_family":{"type":"string","description":"ipv4 or ipv6","description_kind":"plain","required":true},"default_route":{"type":"bool","description":"Boolean flag to set the default route policy. False by default","description_kind":"plain","optional":true},"device_id":{"type":"string","description":"ID of device","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"status":{"type":"string","description":"Status of the session - up or down","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_connection":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description of the connection resource","description_kind":"plain","optional":true},"facility":{"type":"string","description":"Facility where the connection will be created","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"Metro where the connection will be created","description_kind":"plain","optional":true,"computed":true},"mode":{"type":"string","description":"Mode for connections in IBX facilities with the dedicated type - standard or tunnel","description_kind":"plain","optional":true},"name":{"type":"string","description":"Name of the connection resource","description_kind":"plain","required":true},"organization_id":{"type":"string","description":"ID of the organization responsible for the connection. Applicable with type \"dedicated\"","description_kind":"plain","optional":true,"computed":true},"ports":{"type":["list",["object",{"id":"string","link_status":"string","name":"string","role":"string","speed":"number","status":"string","virtual_circuit_ids":["list","string"]}]],"description":"List of connection ports - primary (`ports[0]`) and secondary (`ports[1]`)","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of the project where the connection is scoped to. Required with type \"shared\"","description_kind":"plain","optional":true},"redundancy":{"type":"string","description":"Connection redundancy - redundant or primary","description_kind":"plain","required":true},"service_token_type":{"type":"string","description":"Only used with shared connection. Type of service token to use for the connection, a_side or z_side","description_kind":"plain","optional":true},"service_tokens":{"type":["list",["object",{"expires_at":"string","id":"string","max_allowed_speed":"string","role":"string","state":"string","type":"string"}]],"description":"Only used with shared connection. List of service tokens required to continue the setup process with [equinix_ecx_l2_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard)","description_kind":"plain","computed":true},"speed":{"type":"string","description":"Port speed. Allowed values are 50Mbps, 200Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps, 10Gbps","description_kind":"plain","required":true},"status":{"type":"string","description":"Status of the connection resource","description_kind":"plain","computed":true},"tags":{"type":["list","string"],"description":"Tags attached to the connection","description_kind":"plain","optional":true},"token":{"type":"string","description":"Only used with shared connection. Fabric Token required to continue the setup process with [equinix_ecx_l2_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard)","description_kind":"plain","deprecated":true,"computed":true},"type":{"type":"string","description":"Connection type - dedicated or shared","description_kind":"plain","required":true},"vlans":{"type":["list","number"],"description":"Only used with shared connection. VLANs to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection","description_kind":"plain","optional":true}},"description_kind":"plain"}},"equinix_metal_device":{"version":0,"block":{"attributes":{"access_private_ipv4":{"type":"string","description":"The ipv4 private IP assigned to the device","description_kind":"plain","computed":true},"access_public_ipv4":{"type":"string","description":"The ipv4 maintenance IP assigned to the device","description_kind":"plain","computed":true},"access_public_ipv6":{"type":"string","description":"The ipv6 maintenance IP assigned to the device","description_kind":"plain","computed":true},"always_pxe":{"type":"bool","description":"If true, a device with OS custom_ipxe will","description_kind":"plain","optional":true},"billing_cycle":{"type":"string","description":"monthly or hourly","description_kind":"plain","optional":true,"computed":true},"created":{"type":"string","description":"The timestamp for when the device was created","description_kind":"plain","computed":true},"custom_data":{"type":"string","description":"A string of the desired Custom Data for the device","description_kind":"plain","optional":true,"sensitive":true},"deployed_facility":{"type":"string","description":"The facility where the device is deployed","description_kind":"plain","computed":true},"deployed_hardware_reservation_id":{"type":"string","description":"ID of hardware reservation where this device was deployed. It is useful when using the next-available hardware reservation","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description string for the device","description_kind":"plain","optional":true},"facilities":{"type":["list","string"],"description":"List of facility codes with deployment preferences. Equinix Metal API will go through the list and will deploy your device to first facility with free capacity. List items must be facility codes or any (a wildcard). To find the facility code, visit [Facilities API docs](https://metal.equinix.com/developers/api/facilities/), set your API auth token in the top of the page and see JSON from the API response. Conflicts with metro","description_kind":"plain","optional":true},"force_detach_volumes":{"type":"bool","description":"Delete device even if it has volumes attached. Only applies for destroy action","description_kind":"plain","optional":true},"hardware_reservation_id":{"type":"string","description":"The UUID of the hardware reservation where you want this device deployed, or next-available if you want to pick your next available reservation automatically","description_kind":"plain","optional":true},"hostname":{"type":"string","description":"The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipxe_script_url":{"type":"string","description":"URL pointing to a hosted iPXE script. More","description_kind":"plain","optional":true},"locked":{"type":"bool","description":"Whether the device is locked","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro area for the new device. Conflicts with facilities","description_kind":"plain","optional":true},"network":{"type":["list",["object",{"address":"string","cidr":"number","family":"number","gateway":"string","public":"bool"}]],"description":"The device's private and public IP (v4 and v6) network details. When a device is run without any special network configuration, it will have 3 addresses: public ipv4, private ipv4 and ipv6","description_kind":"plain","computed":true},"network_type":{"type":"string","description":"Network type of a device, used in [Layer 2 networking](https://metal.equinix.com/developers/docs/networking/layer2/). Will be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded","description_kind":"plain","deprecated":true,"computed":true},"operating_system":{"type":"string","description":"The operating system slug. To find the slug, or visit [Operating Systems API docs](https://metal.equinix.com/developers/api/operatingsystems), set your API auth token in the top of the page and see JSON from the API response","description_kind":"plain","required":true},"plan":{"type":"string","description":"The device plan slug. To find the plan slug, visit [Device plans API docs](https://metal.equinix.com/developers/api/plans), set your auth token in the top of the page and see JSON from the API response","description_kind":"plain","required":true},"ports":{"type":["list",["object",{"bonded":"bool","id":"string","mac":"string","name":"string","type":"string"}]],"description":"Ports assigned to the device","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The ID of the project in which to create the device","description_kind":"plain","required":true},"project_ssh_key_ids":{"type":["list","string"],"description":"Array of IDs of the project SSH keys which should be added to the device. If you omit this, SSH keys of all the members of the parent project will be added to the device. If you specify this array, only the listed project SSH keys (and any user_ssh_key_ids) will be added. Project SSH keys can be created with the [equinix_metal_project_ssh_key](equinix_metal_project_ssh_key.md) resource","description_kind":"plain","optional":true},"root_password":{"type":"string","description":"Root password to the server (disabled after 24 hours)","description_kind":"plain","computed":true,"sensitive":true},"ssh_key_ids":{"type":["list","string"],"description":"List of IDs of SSH keys deployed in the device, can be both user and project SSH keys","description_kind":"plain","computed":true},"state":{"type":"string","description":"The status of the device","description_kind":"plain","computed":true},"storage":{"type":"string","description":"JSON for custom partitioning. Only usable on reserved hardware. More information in in the [Custom Partitioning and RAID](https://metal.equinix.com/developers/docs/servers/custom-partitioning-raid/) doc","description_kind":"plain","optional":true},"tags":{"type":["list","string"],"description":"Tags attached to the device","description_kind":"plain","optional":true},"termination_time":{"type":"string","description":"Timestamp for device termination. For example \"2021-09-03T16:32:00+03:00\". If you don't supply timezone info, timestamp is assumed to be in UTC.","description_kind":"plain","optional":true},"updated":{"type":"string","description":"The timestamp for the last time the device was updated","description_kind":"plain","computed":true},"user_data":{"type":"string","description":"A string of the desired User Data for the device","description_kind":"plain","optional":true,"sensitive":true},"user_ssh_key_ids":{"type":["list","string"],"description":"Array of IDs of the user SSH keys which should be added to the device. If you omit this, SSH keys of all the members of the parent project will be added to the device. If you specify this array, only the listed user SSH keys (and any project_ssh_key_ids) will be added. User SSH keys can be created with the [equinix_metal_ssh_key](equinix_metal_ssh_key.md) resource","description_kind":"plain","optional":true},"wait_for_reservation_deprovision":{"type":"bool","description":"Only used for devices in reserved hardware. If set, the deletion of this device will block until the hardware reservation is marked provisionable (about 4 minutes in August 2019)","description_kind":"plain","optional":true}},"block_types":{"ip_address":{"nesting_mode":"list","block":{"attributes":{"cidr":{"type":"number","description":"CIDR suffix for IP block assigned to this device","description_kind":"plain","optional":true},"reservation_ids":{"type":["list","string"],"description":"IDs of reservations to pick the blocks from","description_kind":"plain","optional":true},"type":{"type":"string","description":"one of public_ipv4,private_ipv4,public_ipv6","description_kind":"plain","required":true}},"description":"A list of IP address types for the device (structure is documented below)","description_kind":"plain"}},"reinstall":{"nesting_mode":"list","block":{"attributes":{"deprovision_fast":{"type":"bool","description":"Whether the OS disk should be filled with `00h` bytes before reinstall","description_kind":"plain","optional":true},"enabled":{"type":"bool","description":"Whether the device should be reinstalled instead of destroyed","description_kind":"plain","optional":true},"preserve_data":{"type":"bool","description":"Whether the non-OS disks should be kept or wiped during reinstall","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_device_network_type":{"version":0,"block":{"attributes":{"device_id":{"type":"string","description":"The ID of the device on which the network type should be set","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"type":{"type":"string","description":"Network type to set. Must be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded","description_kind":"plain","required":true}},"description_kind":"plain"}},"equinix_metal_gateway":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_reservation_id":{"type":"string","description":"UUID of the Public or VRF IP Reservation to associate, must be in the same metro as the VLAN","description_kind":"plain","optional":true},"private_ipv4_subnet_size":{"type":"number","description":"Size of the private IPv4 subnet to create for this gateway, one of [8 16 32 64 128]","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"UUID of the Project where the Gateway is scoped to","description_kind":"plain","required":true},"state":{"type":"string","description":"Status of the gateway resource","description_kind":"plain","computed":true},"vlan_id":{"type":"string","description":"UUID of the VLAN to associate","description_kind":"plain","required":true},"vrf_id":{"type":"string","description":"UUID of the VRF associated with the IP Reservation","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_ip_attachment":{"version":0,"block":{"attributes":{"address":{"type":"string","description_kind":"plain","computed":true},"address_family":{"type":"number","description":"Address family as integer (4 or 6)","description_kind":"plain","computed":true},"cidr":{"type":"number","description":"Length of CIDR prefix of the block as integer","description_kind":"plain","computed":true},"cidr_notation":{"type":"string","description_kind":"plain","required":true},"device_id":{"type":"string","description_kind":"plain","required":true},"gateway":{"type":"string","description_kind":"plain","computed":true},"global":{"type":"bool","description":"Flag indicating whether IP block is global, i.e. assignable in any location","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"manageable":{"type":"bool","description_kind":"plain","computed":true},"management":{"type":"bool","description_kind":"plain","computed":true},"netmask":{"type":"string","description":"Mask in decimal notation, e.g. 255.255.255.0","description_kind":"plain","computed":true},"network":{"type":"string","description":"Network IP address portion of the block specification","description_kind":"plain","computed":true},"public":{"type":"bool","description":"Flag indicating whether IP block is addressable from the Internet","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_organization":{"version":0,"block":{"attributes":{"created":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"logo":{"type":"string","description":"Logo URL","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the Organization","description_kind":"plain","required":true},"twitter":{"type":"string","description":"Twitter handle","description_kind":"plain","optional":true},"updated":{"type":"string","description_kind":"plain","computed":true},"website":{"type":"string","description":"Website link","description_kind":"plain","optional":true}},"block_types":{"address":{"nesting_mode":"list","block":{"attributes":{"address":{"type":"string","description":"Postal address","description_kind":"plain","required":true},"city":{"type":"string","description":"City name","description_kind":"plain","required":true},"country":{"type":"string","description":"Two letter country code (ISO 3166-1 alpha-2), e.g. US","description_kind":"plain","required":true},"state":{"type":"string","description":"State name","description_kind":"plain","optional":true},"zip_code":{"type":"string","description":"Zip Code","description_kind":"plain","required":true}},"description":"Address information block","description_kind":"plain"},"min_items":1,"max_items":1}},"description_kind":"plain"}},"equinix_metal_port":{"version":0,"block":{"attributes":{"bond_id":{"type":"string","description":"UUID of the bond port","description_kind":"plain","computed":true},"bond_name":{"type":"string","description":"Name of the bond port","description_kind":"plain","computed":true},"bonded":{"type":"bool","description":"Flag indicating whether the port should be bonded","description_kind":"plain","required":true},"disbond_supported":{"type":"bool","description":"Flag indicating whether the port can be removed from a bond","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"layer2":{"type":"bool","description":"Flag indicating whether the port is in layer2 (or layer3) mode","description_kind":"plain","optional":true},"mac":{"type":"string","description":"MAC address of the port","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the port to look up, e.g. bond0, eth1","description_kind":"plain","computed":true},"native_vlan_id":{"type":"string","description":"UUID of native VLAN of the port","description_kind":"plain","optional":true},"network_type":{"type":"string","description":"One of layer2-bonded, layer2-individual, layer3, hybrid and hybrid-bonded. This attribute is only set on bond ports.","description_kind":"plain","computed":true},"port_id":{"type":"string","description":"UUID of the port to lookup","description_kind":"plain","required":true},"reset_on_delete":{"type":"bool","description":"Behavioral setting to reset the port to default settings. For a bond port it means layer3 without vlans attached, eth ports will be bonded without native vlan and vlans attached","description_kind":"plain","optional":true},"type":{"type":"string","description":"Port type","description_kind":"plain","computed":true},"vlan_ids":{"type":["set","string"],"description":"UUIDs VLANs to attach. To avoid jitter, use the UUID and not the VXLAN","description_kind":"plain","optional":true,"computed":true},"vxlan_ids":{"type":["set","number"],"description":"VLAN VXLAN ids to attach (example: [1000])","description_kind":"plain","optional":true,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_port_vlan_attachment":{"version":0,"block":{"attributes":{"device_id":{"type":"string","description":"ID of device to be assigned to the VLAN","description_kind":"plain","required":true},"force_bond":{"type":"bool","description":"Add port back to the bond when this resource is removed. Default is false","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"native":{"type":"bool","description":"Mark this VLAN a native VLAN on the port. This can be used only if this assignment assigns second or further VLAN to the port. To ensure that this attachment is not first on a port, you can use depends_on pointing to another equinix_metal_port_vlan_attachment, just like in the layer2-individual example above","description_kind":"plain","optional":true},"port_id":{"type":"string","description":"UUID of device port","description_kind":"plain","computed":true},"port_name":{"type":"string","description":"Name of network port to be assigned to the VLAN","description_kind":"plain","required":true},"vlan_id":{"type":"string","description":"UUID of VLAN API resource","description_kind":"plain","computed":true},"vlan_vnid":{"type":"number","description":"VXLAN Network Identifier, integer","description_kind":"plain","required":true}},"description_kind":"plain"}},"equinix_metal_project":{"version":0,"block":{"attributes":{"backend_transfer":{"type":"bool","description":"Enable or disable [Backend Transfer](https://metal.equinix.com/developers/docs/networking/backend-transfer/), default is false","description_kind":"plain","optional":true},"created":{"type":"string","description":"The timestamp for when the project was created","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the project","description_kind":"plain","required":true},"organization_id":{"type":"string","description":"The UUID of organization under which you want to create the project. If you leave it out, the project will be create under your the default organization of your account","description_kind":"plain","optional":true,"computed":true},"payment_method_id":{"type":"string","description":"The UUID of payment method for this project. The payment method and the project need to belong to the same organization (passed with organization_id, or default)","description_kind":"plain","optional":true,"computed":true},"updated":{"type":"string","description":"The timestamp for the last time the project was updated","description_kind":"plain","computed":true}},"block_types":{"bgp_config":{"nesting_mode":"list","block":{"attributes":{"asn":{"type":"number","description":"Autonomous System Number for local BGP deployment","description_kind":"plain","required":true},"deployment_type":{"type":"string","description":"\"local\" or \"global\", the local is likely to be usable immediately, the global will need to be review by Equinix Metal engineers","description_kind":"plain","required":true},"max_prefix":{"type":"number","description":"The maximum number of route filters allowed per server","description_kind":"plain","computed":true},"md5":{"type":"string","description":"Password for BGP session in plaintext (not a checksum)","description_kind":"plain","optional":true,"sensitive":true},"status":{"type":"string","description":"Status of BGP configuration in the project","description_kind":"plain","computed":true}},"description":"Optional BGP settings. Refer to [Equinix Metal guide for BGP](https://metal.equinix.com/developers/docs/networking/local-global-bgp/)","description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"equinix_metal_project_api_key":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description string for the API key","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"UUID of project which the new API key is scoped to","description_kind":"plain","required":true},"read_only":{"type":"bool","description":"Flag indicating whether the API key shoud be read-only","description_kind":"plain","required":true},"token":{"type":"string","description":"API token for API clients","description_kind":"plain","computed":true,"sensitive":true}},"description_kind":"plain"}},"equinix_metal_project_ssh_key":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The timestamp for when the SSH key was created","description_kind":"plain","computed":true},"fingerprint":{"type":"string","description":"The fingerprint of the SSH key","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the SSH key for identification","description_kind":"plain","required":true},"owner_id":{"type":"string","description":"The UUID of the Equinix Metal API User who owns this key","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The ID of parent project","description_kind":"plain","required":true},"public_key":{"type":"string","description":"The public key. If this is a file, it","description_kind":"plain","required":true},"updated":{"type":"string","description":"The timestamp for the last time the SSH key was updated","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_reserved_ip_block":{"version":0,"block":{"attributes":{"address":{"type":"string","description_kind":"plain","computed":true},"address_family":{"type":"number","description":"Address family as integer (4 or 6)","description_kind":"plain","computed":true},"cidr":{"type":"number","description":"the size of the network to reserve from an existing vrf ip_range. `cidr` can only be specified with `vrf_id`. Minimum range is 22-29, with 30-31 supported and necessary for virtual-circuits","description_kind":"plain","optional":true,"computed":true},"cidr_notation":{"type":"string","description_kind":"plain","computed":true},"custom_data":{"type":"string","description":"Custom Data is an arbitrary object (submitted in Terraform as serialized JSON) to assign to the IP Reservation. This may be helpful for self-managed IPAM. The object must be valid JSON.","description_kind":"plain","optional":true},"description":{"type":"string","description":"Arbitrary description","description_kind":"plain","optional":true},"facility":{"type":"string","description":"Facility where to allocate the public IP address block, makes sense only for type==public_ipv4, must be empty for type==global_ipv4, conflicts with metro","description_kind":"plain","optional":true},"gateway":{"type":"string","description_kind":"plain","computed":true},"global":{"type":"bool","description":"Flag indicating whether IP block is global, i.e. assignable in any location","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"manageable":{"type":"bool","description_kind":"plain","computed":true},"management":{"type":"bool","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro where to allocate the public IP address block, makes sense only for type==public_ipv4, must be empty for type==global_ipv4, conflicts with facility","description_kind":"plain","optional":true},"netmask":{"type":"string","description":"Mask in decimal notation, e.g. 255.255.255.0","description_kind":"plain","computed":true},"network":{"type":"string","description":"an unreserved network address from an existing vrf ip_range. `network` can only be specified with vrf_id","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"The metal project ID where to allocate the address block","description_kind":"plain","required":true},"public":{"type":"bool","description":"Flag indicating whether IP block is addressable from the Internet","description_kind":"plain","computed":true},"quantity":{"type":"number","description":"The number of allocated /32 addresses, a power of 2","description_kind":"plain","optional":true,"computed":true},"tags":{"type":["set","string"],"description":"Tags attached to the reserved block","description_kind":"plain","optional":true},"type":{"type":"string","description":"Either global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4.","description_kind":"plain","optional":true},"vrf_id":{"type":"string","description":"VRF ID for type=vrf reservations","description_kind":"plain","optional":true},"wait_for_state":{"type":"string","description":"Wait for the IP reservation block to reach a desired state on resource creation. One of: `pending`, `created`. The `created` state is default and recommended if the addresses are needed within the configuration. An error will be returned if a timeout or the `denied` state is encountered.","description_kind":"plain","optional":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_spot_market_request":{"version":0,"block":{"attributes":{"devices_max":{"type":"number","description":"Maximum number devices to be created","description_kind":"plain","required":true},"devices_min":{"type":"number","description":"Miniumum number devices to be created","description_kind":"plain","required":true},"facilities":{"type":["list","string"],"description":"Facility IDs where devices should be created","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"max_bid_price":{"type":"number","description":"Maximum price user is willing to pay per hour per device","description_kind":"plain","required":true},"metro":{"type":"string","description":"Metro where devices should be created","description_kind":"plain","optional":true},"project_id":{"type":"string","description":"Project ID","description_kind":"plain","required":true},"wait_for_devices":{"type":"bool","description":"On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are removed","description_kind":"plain","optional":true}},"block_types":{"instance_parameters":{"nesting_mode":"list","block":{"attributes":{"always_pxe":{"type":"bool","description_kind":"plain","optional":true},"billing_cycle":{"type":"string","description_kind":"plain","required":true},"customdata":{"type":"string","description_kind":"plain","optional":true},"description":{"type":"string","description_kind":"plain","optional":true},"features":{"type":["list","string"],"description_kind":"plain","optional":true},"hostname":{"type":"string","description_kind":"plain","required":true},"ipxe_script_url":{"type":"string","description_kind":"plain","optional":true},"locked":{"type":"bool","description_kind":"plain","optional":true},"operating_system":{"type":"string","description_kind":"plain","required":true},"plan":{"type":"string","description_kind":"plain","required":true},"project_ssh_keys":{"type":["list","string"],"description_kind":"plain","optional":true},"tags":{"type":["list","string"],"description_kind":"plain","optional":true},"termintation_time":{"type":"string","description_kind":"plain","computed":true},"user_ssh_keys":{"type":["list","string"],"description_kind":"plain","optional":true},"userdata":{"type":"string","description_kind":"plain","optional":true}},"description":"Parameters for devices provisioned from this request. You can find the parameter description from the [equinix_metal_device doc](device.md)","description_kind":"plain"},"min_items":1,"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}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_ssh_key":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The timestamp for when the SSH key was created","description_kind":"plain","computed":true},"fingerprint":{"type":"string","description":"The fingerprint of the SSH key","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the SSH key for identification","description_kind":"plain","required":true},"owner_id":{"type":"string","description":"The UUID of the Equinix Metal API User who owns this key","description_kind":"plain","computed":true},"public_key":{"type":"string","description":"The public key. If this is a file, it","description_kind":"plain","required":true},"updated":{"type":"string","description":"The timestamp for the last time the SSH key was updated","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_user_api_key":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description string for the API key","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"read_only":{"type":"bool","description":"Flag indicating whether the API key shoud be read-only","description_kind":"plain","required":true},"token":{"type":"string","description":"API token for API clients","description_kind":"plain","computed":true,"sensitive":true},"user_id":{"type":"string","description":"UUID of user owning this key","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_virtual_circuit":{"version":0,"block":{"attributes":{"connection_id":{"type":"string","description":"UUID of Connection where the VC is scoped to","description_kind":"plain","required":true},"customer_ip":{"type":"string","description":"The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet.","description_kind":"plain","optional":true},"description":{"type":"string","description":"Description of the Virtual Circuit resource","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"md5":{"type":"string","description":"The password that can be set for the VRF BGP peer","description_kind":"plain","optional":true,"sensitive":true},"metal_ip":{"type":"string","description":"The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet.","description_kind":"plain","optional":true},"name":{"type":"string","description":"Name of the Virtual Circuit resource","description_kind":"plain","optional":true},"nni_vlan":{"type":"number","description":"Equinix Metal network-to-network VLAN ID (optional when the connection has mode=tunnel)","description_kind":"plain","optional":true},"nni_vnid":{"type":"number","description":"Nni VLAN ID parameter, see https://metal.equinix.com/developers/docs/networking/fabric/","description_kind":"plain","computed":true},"peer_asn":{"type":"number","description":"The BGP ASN of the peer. The same ASN may be the used across several VCs, but it cannot be the same as the local_asn of the VRF.","description_kind":"plain","optional":true},"port_id":{"type":"string","description":"UUID of the Connection Port where the VC is scoped to","description_kind":"plain","required":true},"project_id":{"type":"string","description":"UUID of the Project where the VC is scoped to","description_kind":"plain","required":true},"speed":{"type":"string","description":"Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared.","description_kind":"plain","optional":true,"computed":true},"status":{"type":"string","description":"Status of the virtual circuit resource","description_kind":"plain","computed":true},"subnet":{"type":"string","description":"A subnet from one of the IP blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /30 or /31.\n\t\t\t\t * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip.\n\t\t\t\t * For a /30 block, it will have four IP addresses, but the first and last IP addresses are not usable. We will default to the first usable IP address for the metal_ip.","description_kind":"plain","optional":true},"tags":{"type":["list","string"],"description":"Tags attached to the virtual circuit","description_kind":"plain","optional":true},"vlan_id":{"type":"string","description":"UUID of the VLAN to associate","description_kind":"plain","optional":true},"vnid":{"type":"number","description":"VNID VLAN parameter, see https://metal.equinix.com/developers/docs/networking/fabric/","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description":"UUID of the VRF to associate","description_kind":"plain","optional":true}},"description_kind":"plain"}},"equinix_metal_vlan":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description string","description_kind":"plain","optional":true},"facility":{"type":"string","description":"Facility where to create the VLAN","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description_kind":"plain","optional":true},"project_id":{"type":"string","description":"ID of parent project","description_kind":"plain","required":true},"vxlan":{"type":"number","description":"VLAN ID, must be unique in metro","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"equinix_metal_vrf":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description of the VRF","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_ranges":{"type":["set","string"],"description":"All IPv4 and IPv6 Ranges that will be available to BGP Peers. IPv4 addresses must be /8 or smaller with a minimum size of /29. IPv6 must be /56 or smaller with a minimum size of /64. Ranges must not overlap other ranges within the VRF.","description_kind":"plain","optional":true},"local_asn":{"type":"number","description":"The 4-byte ASN set on the VRF.","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"Metro Code","description_kind":"plain","required":true},"name":{"type":"string","description":"User-supplied name of the VRF, unique to the project","description_kind":"plain","required":true},"project_id":{"type":"string","description":"Project ID","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_network_acl_template":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"ACL template description, up to 200 characters","description_kind":"plain","optional":true},"device_acl_status":{"type":"string","description":"Status of ACL template provisioning process on a device, where template was applied","description_kind":"plain","computed":true},"device_details":{"type":["list",["object",{"acl_status":"string","name":"string","uuid":"string"}]],"description":"Device Details to which ACL template is assigned to. ","description_kind":"plain","computed":true},"device_id":{"type":"string","description":"Identifier of a network device where template was applied","description_kind":"plain","deprecated":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"ACL template location metro code","description_kind":"plain","deprecated":true,"optional":true},"name":{"type":"string","description":"ACL template name","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Unique identifier of ACL template resource","description_kind":"plain","computed":true}},"block_types":{"inbound_rule":{"nesting_mode":"list","block":{"attributes":{"description":{"type":"string","description":"Inbound rule description, up to 200 characters","description_kind":"plain","optional":true},"dst_port":{"type":"string","description":"Inbound traffic destination ports. Either up to 10, comma separated ports or port range or any word","description_kind":"plain","required":true},"protocol":{"type":"string","description":"Inbound traffic protocol. One of: `IP`, `TCP`, `UDP`","description_kind":"plain","required":true},"sequence_number":{"type":"number","description":"Inbound rule sequence number","description_kind":"plain","computed":true},"source_type":{"type":"string","description":"Type of traffic source used in a given inbound rule","description_kind":"plain","deprecated":true,"computed":true},"src_port":{"type":"string","description":"Inbound traffic source ports. Either up to 10, comma separated ports or port range or any word","description_kind":"plain","required":true},"subnet":{"type":"string","description":"Inbound traffic source IP subnet in CIDR format","description_kind":"plain","optional":true},"subnets":{"type":["list","string"],"description":"Inbound traffic source IP subnets in CIDR format","description_kind":"plain","deprecated":true,"optional":true}},"description":"One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones.","description_kind":"plain"},"min_items":1}},"description":"Resource allows creation and management of Equinix Network Edge device Access Control List templates","description_kind":"plain"}},"equinix_network_bgp":{"version":0,"block":{"attributes":{"authentication_key":{"type":"string","description":"Shared key used for BGP peer authentication","description_kind":"plain","optional":true,"sensitive":true},"connection_id":{"type":"string","description":"Identifier of a connection established between network device and remote service provider that will be used for peering","description_kind":"plain","required":true},"device_id":{"type":"string","description":"Unique identifier of a network device that is a local peer in a given BGP peering configuration","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"local_asn":{"type":"number","description":"Local ASN number","description_kind":"plain","required":true},"local_ip_address":{"type":"string","description":"IP address in CIDR format of a local device","description_kind":"plain","required":true},"provisioning_status":{"type":"string","description":"BGP peering configuration provisioning status","description_kind":"plain","computed":true},"remote_asn":{"type":"number","description":"Remote ASN number","description_kind":"plain","required":true},"remote_ip_address":{"type":"string","description":"IP address of remote peer","description_kind":"plain","required":true},"state":{"type":"string","description":"BGP peer state","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"BGP peering configuration unique identifier","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Resource allows creation and management of Equinix Network Edge BGP peering configurations","description_kind":"plain"}},"equinix_network_device":{"version":0,"block":{"attributes":{"account_number":{"type":"string","description":"Device billing account number","description_kind":"plain","required":true},"acl_template_id":{"type":"string","description":"Unique identifier of applied ACL template","description_kind":"plain","optional":true},"additional_bandwidth":{"type":"number","description":"Additional Internet bandwidth, in Mbps, that will be allocated to the device","description_kind":"plain","optional":true,"computed":true},"asn":{"type":"number","description":"Autonomous system number","description_kind":"plain","computed":true},"byol":{"type":"bool","description":"Boolean value that determines device licensing mode: bring your own license or subscription (default)","description_kind":"plain","optional":true},"core_count":{"type":"number","description":"Number of CPU cores used by device","description_kind":"plain","required":true},"hostname":{"type":"string","description":"Device hostname prefix","description_kind":"plain","optional":true,"computed":true},"ibx":{"type":"string","description":"Device location Equinix Business Exchange name","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"interface":{"type":["list",["object",{"assigned_type":"string","id":"number","ip_address":"string","mac_address":"string","name":"string","operational_status":"string","status":"string","type":"string"}]],"description":"List of device interfaces","description_kind":"plain","computed":true},"interface_count":{"type":"number","description":"Number of network interfaces on a device. If not specified, default number for a given device type will be used","description_kind":"plain","optional":true,"computed":true},"license_file":{"type":"string","description":"Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode","description_kind":"plain","optional":true},"license_file_id":{"type":"string","description":"Unique identifier of applied license file","description_kind":"plain","computed":true},"license_status":{"type":"string","description":"Device license registration status","description_kind":"plain","computed":true},"license_token":{"type":"string","description":"License Token applicable for some device types in BYOL licensing mode","description_kind":"plain","optional":true},"metro_code":{"type":"string","description":"Device location metro code","description_kind":"plain","required":true},"mgmt_acl_template_uuid":{"type":"string","description":"Unique identifier of applied MGMT ACL template","description_kind":"plain","optional":true},"name":{"type":"string","description":"Device name","description_kind":"plain","required":true},"notifications":{"type":["set","string"],"description":"List of email addresses that will receive device status notifications","description_kind":"plain","required":true},"order_reference":{"type":"string","description":"Name/number used to identify device order on the invoice","description_kind":"plain","optional":true},"package_code":{"type":"string","description":"Device software package code","description_kind":"plain","required":true},"purchase_order_number":{"type":"string","description":"Purchase order number associated with a device order","description_kind":"plain","optional":true},"redundancy_type":{"type":"string","description":"Device redundancy type applicable for HA devices, either primary or secondary","description_kind":"plain","computed":true},"redundant_id":{"type":"string","description":"Unique identifier for a redundant device, applicable for HA device","description_kind":"plain","computed":true},"region":{"type":"string","description":"Device location region","description_kind":"plain","computed":true},"self_managed":{"type":"bool","description":"Boolean value that determines device management mode: self-managed or subscription (default)","description_kind":"plain","optional":true},"ssh_ip_address":{"type":"string","description":"IP address of SSH enabled interface on the device","description_kind":"plain","computed":true},"ssh_ip_fqdn":{"type":"string","description":"FQDN of SSH enabled interface on the device","description_kind":"plain","computed":true},"status":{"type":"string","description":"Device provisioning status","description_kind":"plain","computed":true},"term_length":{"type":"number","description":"Device term length","description_kind":"plain","required":true},"throughput":{"type":"number","description":"Device license throughput","description_kind":"plain","optional":true},"throughput_unit":{"type":"string","description":"Device license throughput unit (Mbps or Gbps)","description_kind":"plain","optional":true},"type_code":{"type":"string","description":"Device type code","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Device unique identifier","description_kind":"plain","computed":true},"vendor_configuration":{"type":["map","string"],"description":"Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress)","description_kind":"plain","optional":true,"computed":true},"version":{"type":"string","description":"Device software software version","description_kind":"plain","required":true},"wan_interface_id":{"type":"string","description":"device interface id picked for WAN","description_kind":"plain","optional":true},"zone_code":{"type":"string","description":"Device location zone code","description_kind":"plain","computed":true}},"block_types":{"cluster_details":{"nesting_mode":"list","block":{"attributes":{"cluster_id":{"type":"string","description":"The id of the cluster","description_kind":"plain","computed":true},"cluster_name":{"type":"string","description":"The name of the cluster device","description_kind":"plain","required":true},"num_of_nodes":{"type":"number","description":"The number of nodes in the cluster","description_kind":"plain","computed":true}},"block_types":{"node0":{"nesting_mode":"list","block":{"attributes":{"license_file_id":{"type":"string","description":"License file id. This is necessary for Fortinet and Juniper clusters","description_kind":"plain","optional":true,"sensitive":true},"license_token":{"type":"string","description":"License token. This is necessary for Palo Alto clusters","description_kind":"plain","optional":true,"sensitive":true},"name":{"type":"string","description":"The name of the node","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"The unique id of the node","description_kind":"plain","computed":true}},"block_types":{"vendor_configuration":{"nesting_mode":"list","block":{"attributes":{"activation_key":{"type":"string","description":"Activation key. This is required for Velocloud clusters","description_kind":"plain","optional":true,"sensitive":true},"admin_password":{"type":"string","description":"The administrative password of the device. You can use it to log in to the console. This field is not available for all device types","description_kind":"plain","optional":true,"computed":true,"sensitive":true},"controller1":{"type":"string","description":"System IP Address. Mandatory for the Fortinet SDWAN cluster device","description_kind":"plain","optional":true},"controller_fqdn":{"type":"string","description":"Controller fqdn. This is required for Velocloud clusters","description_kind":"plain","optional":true},"hostname":{"type":"string","description":"Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters","description_kind":"plain","optional":true},"root_password":{"type":"string","description":"The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster","description_kind":"plain","optional":true,"sensitive":true}},"description":"An object that has fields relevant to the vendor of the cluster device","description_kind":"plain"},"max_items":1}},"description":"An object that has node0 details","description_kind":"plain"},"min_items":1,"max_items":1},"node1":{"nesting_mode":"list","block":{"attributes":{"license_file_id":{"type":"string","description":"License file id. This is necessary for Fortinet and Juniper clusters","description_kind":"plain","optional":true,"sensitive":true},"license_token":{"type":"string","description":"License token. This is necessary for Palo Alto clusters","description_kind":"plain","optional":true,"sensitive":true},"name":{"type":"string","description":"The name of the node","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"The unique id of the node","description_kind":"plain","computed":true}},"block_types":{"vendor_configuration":{"nesting_mode":"list","block":{"attributes":{"activation_key":{"type":"string","description":"Activation key. This is required for Velocloud clusters","description_kind":"plain","optional":true,"sensitive":true},"admin_password":{"type":"string","description":"The administrative password of the device. You can use it to log in to the console. This field is not available for all device types","description_kind":"plain","optional":true,"computed":true,"sensitive":true},"controller1":{"type":"string","description":"System IP Address. Mandatory for the Fortinet SDWAN cluster device","description_kind":"plain","optional":true},"controller_fqdn":{"type":"string","description":"Controller fqdn. This is required for Velocloud clusters","description_kind":"plain","optional":true},"hostname":{"type":"string","description":"Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters","description_kind":"plain","optional":true},"root_password":{"type":"string","description":"The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster","description_kind":"plain","optional":true,"sensitive":true}},"description":"An object that has fields relevant to the vendor of the cluster device","description_kind":"plain"},"max_items":1}},"description":"An object that has node1 details","description_kind":"plain"},"min_items":1,"max_items":1}},"description":"An object that has the cluster details","description_kind":"plain"},"max_items":1},"secondary_device":{"nesting_mode":"list","block":{"attributes":{"account_number":{"type":"string","description":"Device billing account number","description_kind":"plain","required":true},"acl_template_id":{"type":"string","description":"Unique identifier of applied ACL template","description_kind":"plain","optional":true},"additional_bandwidth":{"type":"number","description":"Additional Internet bandwidth, in Mbps, that will be allocated to the device","description_kind":"plain","optional":true,"computed":true},"asn":{"type":"number","description":"Autonomous system number","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"Device hostname prefix","description_kind":"plain","optional":true},"ibx":{"type":"string","description":"Device location Equinix Business Exchange name","description_kind":"plain","computed":true},"interface":{"type":["list",["object",{"assigned_type":"string","id":"number","ip_address":"string","mac_address":"string","name":"string","operational_status":"string","status":"string","type":"string"}]],"description":"List of device interfaces","description_kind":"plain","computed":true},"license_file":{"type":"string","description":"Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode","description_kind":"plain","optional":true},"license_file_id":{"type":"string","description":"Unique identifier of applied license file","description_kind":"plain","computed":true},"license_status":{"type":"string","description":"Device license registration status","description_kind":"plain","computed":true},"license_token":{"type":"string","description":"License Token applicable for some device types in BYOL licensing mode","description_kind":"plain","optional":true},"metro_code":{"type":"string","description":"Device location metro code","description_kind":"plain","required":true},"mgmt_acl_template_uuid":{"type":"string","description":"Unique identifier of applied MGMT ACL template","description_kind":"plain","optional":true},"name":{"type":"string","description":"Device name","description_kind":"plain","required":true},"notifications":{"type":["set","string"],"description":"List of email addresses that will receive device status notifications","description_kind":"plain","required":true},"redundancy_type":{"type":"string","description":"Device redundancy type applicable for HA devices, either primary or secondary","description_kind":"plain","computed":true},"redundant_id":{"type":"string","description":"Unique identifier for a redundant device, applicable for HA device","description_kind":"plain","computed":true},"region":{"type":"string","description":"Device location region","description_kind":"plain","computed":true},"ssh_ip_address":{"type":"string","description":"IP address of SSH enabled interface on the device","description_kind":"plain","computed":true},"ssh_ip_fqdn":{"type":"string","description":"FQDN of SSH enabled interface on the device","description_kind":"plain","computed":true},"status":{"type":"string","description":"Device provisioning status","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Device unique identifier","description_kind":"plain","computed":true},"vendor_configuration":{"type":["map","string"],"description":"Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress)","description_kind":"plain","optional":true,"computed":true},"wan_interface_id":{"type":"string","description":"device interface id picked for WAN","description_kind":"plain","optional":true},"zone_code":{"type":"string","description":"Device location zone code","description_kind":"plain","computed":true}},"block_types":{"ssh_key":{"nesting_mode":"set","block":{"attributes":{"key_name":{"type":"string","description":"Reference by name to previously provisioned public SSH key","description_kind":"plain","required":true},"username":{"type":"string","description":"Username associated with given key","description_kind":"plain","required":true}},"description":"Definition of SSH key that will be provisioned on a device","description_kind":"plain"},"max_items":1}},"description":"Definition of secondary device applicable for HA setup","description_kind":"plain"},"max_items":1},"ssh_key":{"nesting_mode":"set","block":{"attributes":{"key_name":{"type":"string","description":"Reference by name to previously provisioned public SSH key","description_kind":"plain","required":true},"username":{"type":"string","description":"Username associated with given key","description_kind":"plain","required":true}},"description":"Definition of SSH key that will be provisioned on a device","description_kind":"plain"},"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},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Resource allows creation and management of Equinix Network Edge virtual devices","description_kind":"plain"}},"equinix_network_device_link":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"name","description_kind":"plain","required":true},"status":{"type":"string","description":"Device link provisioning status","description_kind":"plain","computed":true},"subnet":{"type":"string","description":"subnet","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Device link unique identifier","description_kind":"plain","computed":true}},"block_types":{"device":{"nesting_mode":"set","block":{"attributes":{"asn":{"type":"number","description":"Device ASN number","description_kind":"plain","optional":true},"id":{"type":"string","description":"Device identifier","description_kind":"plain","required":true},"interface_id":{"type":"number","description":"Device network interface identifier to use for device link connection","description_kind":"plain","optional":true},"ip_address":{"type":"string","description":"Assigned IP address from device link subnet","description_kind":"plain","computed":true},"status":{"type":"string","description":"Device link connection provisioning status","description_kind":"plain","computed":true}},"description_kind":"plain"},"min_items":2},"link":{"nesting_mode":"set","block":{"attributes":{"account_number":{"type":"string","description":"Billing account number to be used for connection charges","description_kind":"plain","required":true},"dst_metro_code":{"type":"string","description":"Connection destination metro code","description_kind":"plain","required":true},"dst_zone_code":{"type":"string","description":"Connection destination zone code","description_kind":"plain","deprecated":true,"optional":true},"src_metro_code":{"type":"string","description":"Connection source metro code","description_kind":"plain","required":true},"src_zone_code":{"type":"string","description":"Connection source zone code","description_kind":"plain","deprecated":true,"optional":true},"throughput":{"type":"string","description":"Connection throughput","description_kind":"plain","required":true},"throughput_unit":{"type":"string","description":"Connection throughput unit","description_kind":"plain","required":true}},"description":"link","description_kind":"plain"}},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Resource allows creation and management of Equinix Network Edge device links","description_kind":"plain"}},"equinix_network_ssh_key":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of SSH key used for identification","description_kind":"plain","required":true},"public_key":{"type":"string","description":"The SSH public key. If this is a file, it can be read using the file interpolation function","description_kind":"plain","required":true},"uuid":{"type":"string","description":"The unique identifier of the key","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Resource allows creation and management of Equinix Network Edge SSH keys","description_kind":"plain"}},"equinix_network_ssh_user":{"version":0,"block":{"attributes":{"device_ids":{"type":["set","string"],"description":"list of device identifiers to which user will have access","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"password":{"type":"string","description":"SSH user password","description_kind":"plain","required":true,"sensitive":true},"username":{"type":"string","description":"SSH user login name","description_kind":"plain","required":true},"uuid":{"type":"string","description":"SSH user unique identifier","description_kind":"plain","computed":true}},"description":"Resource allows creation and management of Equinix Network Edge SSH users","description_kind":"plain"}}},"data_source_schemas":{"equinix_ecx_l2_sellerprofile":{"version":0,"block":{"attributes":{"additional_info":{"type":["set",["object",{"captured_in_email":"bool","data_type":"string","description":"string","mandatory":"bool","name":"string"}]],"description":"One or more specifications of additional buyer information attributes that can be provided in connection definition that uses given seller profile","description_kind":"plain","computed":true},"description":{"type":"string","description":"Seller Profile text description","description_kind":"plain","computed":true},"encapsulation":{"type":"string","description":"Seller profile's encapsulation (either Dot1q or QinQ)","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":["set",["object",{"code":"string","ibxes":["set","string"],"name":"string","regions":["map","string"]}]],"description":"One or more specifications of metro locations supported by seller profile","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the seller profile","description_kind":"plain","optional":true,"computed":true},"organization_global_name":{"type":"string","description":"Name of seller's global organization","description_kind":"plain","optional":true,"computed":true},"organization_name":{"type":"string","description":"Name of seller's organization","description_kind":"plain","optional":true,"computed":true},"redundancy_required":{"type":"bool","description":"Boolean that indicate if seller requires connections to be redundant","description_kind":"plain","computed":true},"speed_band":{"type":["set",["object",{"speed":"number","speed_unit":"string"}]],"description":"One or more specifications of speed/bandwidth supported by given seller profile","description_kind":"plain","computed":true},"speed_customization_allowed":{"type":"bool","description":"Boolean that indicates if seller allows customer to enter a custom connection speed","description_kind":"plain","computed":true},"speed_from_api":{"type":"bool","description":"Boolean that indicates if seller is deriving connection speed from an API call","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Unique identifier of the seller profile","description_kind":"plain","computed":true}},"description":"Use this data source to get details of Equinix Fabric layer 2\tseller profile with a given name and / or organization","description_kind":"plain"}},"equinix_ecx_l2_sellerprofiles":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_codes":{"type":["set","string"],"description":"List of metro codes of locations that should be served by resulting profiles","description_kind":"plain","optional":true},"name_regex":{"type":"string","description":"A regex string to apply on returned seller profile names and filter search results","description_kind":"plain","optional":true},"organization_global_name":{"type":"string","description":"Name of seller's global organization","description_kind":"plain","optional":true},"organization_name":{"type":"string","description":"Name of seller's organization","description_kind":"plain","optional":true},"profiles":{"type":["list",["object",{"additional_info":["set",["object",{"captured_in_email":"bool","data_type":"string","description":"string","mandatory":"bool","name":"string"}]],"description":"string","encapsulation":"string","metro":["set",["object",{"code":"string","ibxes":["set","string"],"name":"string","regions":["map","string"]}]],"name":"string","organization_global_name":"string","organization_name":"string","redundancy_required":"bool","speed_band":["set",["object",{"speed":"number","speed_unit":"string"}]],"speed_customization_allowed":"bool","speed_from_api":"bool","uuid":"string"}]],"description":"Resulting list of profiles that match filtering criteria","description_kind":"plain","computed":true},"speed_bands":{"type":["set","string"],"description":"List of speed bands that should be supported by resulting profiles","description_kind":"plain","optional":true}},"description":"Use this data source to get list of Equinix Fabric layer 2 seller profiles","description_kind":"plain"}},"equinix_ecx_port":{"version":0,"block":{"attributes":{"bandwidth":{"type":"string","description":"Port Bandwidth in bytes","description_kind":"plain","computed":true},"buyout":{"type":"bool","description":"Boolean value that indicates whether the port supports unlimited connections.","description_kind":"plain","computed":true},"encapsulation":{"type":"string","description":"The VLAN encapsulation of the port (Dot1q or QinQ)","description_kind":"plain","computed":true},"ibx":{"type":"string","description":"Port location Equinix Business Exchange (IBX)","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Port location metro code","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the port","description_kind":"plain","required":true},"priority":{"type":"string","description":"The priority of the device (primary / secondary) where the port resides","description_kind":"plain","computed":true},"region":{"type":"string","description":"Port location region","description_kind":"plain","computed":true},"status":{"type":"string","description":"Port status that indicates whether a port has been assigned or is ready for connection","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Unique identifier of the por","description_kind":"plain","computed":true}},"description":"Use this data source to get details of Equinix Fabric port with a given name","description_kind":"plain"}},"equinix_metal_connection":{"version":0,"block":{"attributes":{"connection_id":{"type":"string","description":"ID of the connection to lookup","description_kind":"plain","required":true},"description":{"type":"string","description":"Description of the connection resource","description_kind":"plain","computed":true},"facility":{"type":"string","description":"Facility which the connection is scoped to","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"Metro which the connection is scoped to","description_kind":"plain","computed":true},"mode":{"type":"string","description":"Connection mode - standard or tunnel","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the connection resource","description_kind":"plain","computed":true},"organization_id":{"type":"string","description":"ID of organization to which the connection is scoped to","description_kind":"plain","computed":true},"ports":{"type":["list",["object",{"id":"string","link_status":"string","name":"string","role":"string","speed":"number","status":"string","virtual_circuit_ids":["list","string"]}]],"description":"List of connection ports - primary (`ports[0]`) and secondary (`ports[1]`)","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of project to which the connection belongs","description_kind":"plain","computed":true},"redundancy":{"type":"string","description":"Connection redundancy - redundant or primary","description_kind":"plain","computed":true},"service_token_type":{"type":"string","description":"Only used with shared connection. Type of service token to use for the connection, a_side or z_side.","description_kind":"plain","computed":true},"service_tokens":{"type":["list",["object",{"expires_at":"string","id":"string","max_allowed_speed":"string","role":"string","state":"string","type":"string"}]],"description":"Only used with shared connection. List of service tokens required to continue the setup process with [equinix_ecx_l2_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard)","description_kind":"plain","computed":true},"speed":{"type":"string","description":"Port speed. Possible values are 50Mbps, 200Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps, 10Gbps","description_kind":"plain","computed":true},"status":{"type":"string","description":"Status of the connection resource","description_kind":"plain","computed":true},"tags":{"type":["list","string"],"description":"Tags attached to the connection","description_kind":"plain","computed":true},"token":{"type":"string","description":"Only used with shared connection. Fabric Token required to continue the setup process with [equinix_ecx_l2_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard)","description_kind":"plain","deprecated":true,"computed":true},"type":{"type":"string","description":"Connection type - dedicated or shared","description_kind":"plain","computed":true},"vlans":{"type":["list","number"],"description":"Attached vlans, only in shared connection.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_device":{"version":0,"block":{"attributes":{"access_private_ipv4":{"type":"string","description":"The ipv4 private IP assigned to the device","description_kind":"plain","computed":true},"access_public_ipv4":{"type":"string","description":"The ipv4 management IP assigned to the device","description_kind":"plain","computed":true},"access_public_ipv6":{"type":"string","description":"The ipv6 management IP assigned to the device","description_kind":"plain","computed":true},"always_pxe":{"type":"bool","description_kind":"plain","computed":true},"billing_cycle":{"type":"string","description":"The billing cycle of the device (monthly or hourly)","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description string for the device","description_kind":"plain","computed":true},"device_id":{"type":"string","description":"Device ID","description_kind":"plain","optional":true,"computed":true},"facility":{"type":"string","description":"The facility where the device is deployed","description_kind":"plain","computed":true},"hardware_reservation_id":{"type":"string","description":"The id of hardware reservation which this device occupies","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"The device name","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipxe_script_url":{"type":"string","description_kind":"plain","computed":true},"metro":{"type":"string","description":"The metro where the device is deployed","description_kind":"plain","computed":true},"network":{"type":["list",["object",{"address":"string","cidr":"number","family":"number","gateway":"string","public":"bool"}]],"description":"The device's private and public IP (v4 and v6) network details. When a device is run without any special network configuration, it will have 3 networks: ublic IPv4 at equinix_metal_device.name.network.0, IPv6 at equinix_metal_device.name.network.1 and private IPv4 at equinix_metal_device.name.network.2. Elastic addresses then stack by type - an assigned public IPv4 will go after the management public IPv4 (to index 1), and will then shift the indices of the IPv6 and private IPv4. Assigned private IPv4 will go after the management private IPv4 (to the end of the network list).","description_kind":"plain","computed":true},"network_type":{"type":"string","description":"L2 network type of the device, one oflayer3, hybrid, layer2-individual, layer2-bonded","description_kind":"plain","computed":true},"operating_system":{"type":"string","description":"The operating system running on the device","description_kind":"plain","computed":true},"plan":{"type":"string","description":"The hardware config of the device","description_kind":"plain","computed":true},"ports":{"type":["list",["object",{"bonded":"bool","id":"string","mac":"string","name":"string","type":"string"}]],"description":"Ports assigned to the device","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The id of the project in which the devices exists","description_kind":"plain","optional":true,"computed":true},"root_password":{"type":"string","description":"Root password to the server (if still available)","description_kind":"plain","computed":true,"sensitive":true},"ssh_key_ids":{"type":["list","string"],"description":"List of IDs of SSH keys deployed in the device, can be both user or project SSH keys","description_kind":"plain","computed":true},"state":{"type":"string","description":"The state of the device","description_kind":"plain","computed":true},"storage":{"type":"string","description_kind":"plain","computed":true},"tags":{"type":["list","string"],"description":"Tags attached to the device","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_device_bgp_neighbors":{"version":0,"block":{"attributes":{"bgp_neighbors":{"type":["list",["object",{"address_family":"number","customer_as":"number","customer_ip":"string","md5_enabled":"bool","md5_password":"string","multihop":"bool","peer_as":"number","peer_ips":["list","string"],"routes_in":["list",["object",{"exact":"bool","route":"string"}]],"routes_out":["list",["object",{"exact":"bool","route":"string"}]]}]],"description":"Array of BGP neighbor records","description_kind":"plain","computed":true},"device_id":{"type":"string","description":"UUID of BGP-enabled device whose neighbors to list","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"equinix_metal_facility":{"version":0,"block":{"attributes":{"code":{"type":"string","description":"The code of the Facility to match","description_kind":"plain","required":true},"features":{"type":["list","string"],"description":"The features of this Facility.","description_kind":"plain","computed":true},"features_required":{"type":["set","string"],"description":"Features which the facility needs to have.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"This facility's metro code.","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of this Facility.","description_kind":"plain","computed":true}},"block_types":{"capacity":{"nesting_mode":"list","block":{"attributes":{"plan":{"type":"string","description":"Plan which has to be available in selected location","description_kind":"plain","required":true},"quantity":{"type":"number","description_kind":"plain","optional":true}},"description":"Optional capacity specification","description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_gateway":{"version":0,"block":{"attributes":{"gateway_id":{"type":"string","description":"UUID of the Metal Gateway to fetch","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_reservation_id":{"type":"string","description":"UUID of the IP Reservation to associate, must be in the same metro as the VLAN","description_kind":"plain","computed":true},"private_ipv4_subnet_size":{"type":"number","description":"Size of the private IPv4 subnet to create for this gateway, one of [8 16 32 64 128]","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"UUID of the Project where the Gateway is scoped to","description_kind":"plain","computed":true},"state":{"type":"string","description":"Status of the virtual circuit resource","description_kind":"plain","computed":true},"vlan_id":{"type":"string","description":"UUID of the VLAN to associate","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description":"UUID of the VRF associated with the IP Reservation","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_hardware_reservation":{"version":0,"block":{"attributes":{"device_id":{"type":"string","description":"UUID of device occupying the reservation","description_kind":"plain","optional":true,"computed":true},"facility":{"type":"string","description":"Plan type for the reservation","description_kind":"plain","computed":true},"id":{"type":"string","description":"ID of the hardware reservation to look up","description_kind":"plain","optional":true,"computed":true},"plan":{"type":"string","description":"Plan type for the reservation","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"UUID of project this reservation is scoped to","description_kind":"plain","computed":true},"provisionable":{"type":"bool","description":"Flag indicating whether the reserved server is provisionable or not. Spare devices can't be provisioned unless they are activated first","description_kind":"plain","computed":true},"short_id":{"type":"string","description":"Reservation short ID","description_kind":"plain","computed":true},"spare":{"type":"bool","description":"Flag indicating whether the Hardware Reservation is a spare. Spare Hardware Reservations are used when a Hardware Reservations requires service from Metal Equinix","description_kind":"plain","computed":true},"switch_uuid":{"type":"string","description":"Switch short ID, can be used to determine if two devices are connected to the same switch","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_ip_block_ranges":{"version":0,"block":{"attributes":{"facility":{"type":"string","description":"Facility code filtering the IP blocks. Global IPv4 blcoks will be listed anyway. If you omit this and metro, all the block from the project will be listed","description_kind":"plain","optional":true},"global_ipv4":{"type":["list","string"],"description":"List of CIDR expressions for Global IPv4 blocks in the project","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipv6":{"type":["list","string"],"description":"List of CIDR expressions for IPv6 blocks in the project","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro code filtering the IP blocks. Global IPv4 blcoks will be listed anyway. If you omit this and facility, all the block from the project will be listed","description_kind":"plain","optional":true},"private_ipv4":{"type":["list","string"],"description":"List of CIDR expressions for Private IPv4 blocks in the project","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of the project from which to list the blocks","description_kind":"plain","required":true},"public_ipv4":{"type":["list","string"],"description":"List of CIDR expressions for Public IPv4 blocks in the project","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_metro":{"version":0,"block":{"attributes":{"code":{"type":"string","description":"The code of the Metro to match","description_kind":"plain","required":true},"country":{"type":"string","description":"The country of this Metro.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The ID of this Metro.","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of this Metro.","description_kind":"plain","computed":true}},"block_types":{"capacity":{"nesting_mode":"list","block":{"attributes":{"plan":{"type":"string","description":"Plan which has to be available in selected location","description_kind":"plain","required":true},"quantity":{"type":"number","description_kind":"plain","optional":true}},"description":"Optional capacity specification","description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_operating_system":{"version":0,"block":{"attributes":{"distro":{"type":"string","description":"Name of the OS distribution","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name or part of the name of the distribution. Case insensitive","description_kind":"plain","optional":true},"provisionable_on":{"type":"string","description":"Plan name","description_kind":"plain","optional":true},"slug":{"type":"string","description":"Operating system slug (same as id)","description_kind":"plain","computed":true},"version":{"type":"string","description":"Version of the distribution","description_kind":"plain","optional":true}},"description_kind":"plain"}},"equinix_metal_organization":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"logo":{"type":"string","description":"Logo URL","description_kind":"plain","computed":true},"name":{"type":"string","description":"The organization name","description_kind":"plain","optional":true,"computed":true},"organization_id":{"type":"string","description":"The UUID of the organization resource","description_kind":"plain","optional":true,"computed":true},"project_ids":{"type":["list","string"],"description":"UUIDs of project resources which belong to this organization","description_kind":"plain","computed":true},"twitter":{"type":"string","description":"Twitter handle","description_kind":"plain","computed":true},"website":{"type":"string","description":"Website link","description_kind":"plain","computed":true}},"block_types":{"address":{"nesting_mode":"list","block":{"attributes":{"address":{"type":"string","description_kind":"plain","optional":true,"computed":true},"city":{"type":"string","description_kind":"plain","optional":true,"computed":true},"country":{"type":"string","description":"Two letter country code (ISO 3166-1 alpha-2), e.g. US","description_kind":"plain","optional":true,"computed":true},"state":{"type":"string","description_kind":"plain","optional":true,"computed":true},"zip_code":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description":"Business' address","description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_plans":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"plans":{"type":["list",["object",{"available_in":["set","string"],"available_in_metros":["set","string"],"class":"string","deployment_types":["set","string"],"description":"string","id":"string","legacy":"bool","line":"string","name":"string","pricing_hour":"number","pricing_month":"number","slug":"string"}]],"description":"Sorted list of available server plans that match the specified filters","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"set","block":{"attributes":{"all":{"type":"bool","description":"If is set to true, the values are joined with an AND, and the requests returns only the results that match all specified values","description_kind":"plain","optional":true},"attribute":{"type":"string","description":"The attribute used to filter. Filter attributes are case-sensitive","description_kind":"plain","required":true},"match_by":{"type":"string","description":"The type of comparison to apply. One of: in (default), re, substring, less_than, less_than_or_equal, greater_than, greater_than_or_equal","description_kind":"plain","optional":true},"values":{"type":["list","string"],"description":"The filter values. Filter values are case-sensitive. If you specify multiple values for a filter, the values are joined with an OR by default, and the request returns all results that match any of the specified values","description_kind":"plain","required":true}},"description":"One or more attribute/values pairs on which to filter results","description_kind":"plain"}},"sort":{"nesting_mode":"list","block":{"attributes":{"attribute":{"type":"string","description":"The attribute used to sort the results. Sort attributes are case-sensitive","description_kind":"plain","required":true},"direction":{"type":"string","description":"Sort results in ascending or descending order. Strings are sorted in alphabetical order. One of: asc, desc","description_kind":"plain","optional":true}},"description":"One or more attribute/direction pairs on which to sort results. If multiple sorts are provided, they will be applied in order","description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_port":{"version":0,"block":{"attributes":{"bond_id":{"type":"string","description":"UUID of the bond port","description_kind":"plain","computed":true},"bond_name":{"type":"string","description":"Name of the bond port","description_kind":"plain","computed":true},"bonded":{"type":"bool","description":"Flag indicating whether the port is bonded","description_kind":"plain","computed":true},"device_id":{"type":"string","description":"Device UUID where to lookup the port","description_kind":"plain","optional":true},"disbond_supported":{"type":"bool","description":"Flag indicating whether the port can be removed from a bond","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"layer2":{"type":"bool","description":"Flag indicating whether the port is in layer2 (or layer3) mode","description_kind":"plain","computed":true},"mac":{"type":"string","description":"MAC address of the port","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the port to look up, e.g. bond0, eth1","description_kind":"plain","optional":true,"computed":true},"native_vlan_id":{"type":"string","description":"UUID of native VLAN of the port","description_kind":"plain","computed":true},"network_type":{"type":"string","description":"One of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded","description_kind":"plain","computed":true},"port_id":{"type":"string","description":"UUID of the port to lookup","description_kind":"plain","optional":true},"type":{"type":"string","description":"Port type","description_kind":"plain","computed":true},"vlan_ids":{"type":["list","string"],"description":"UUIDs of attached VLANs","description_kind":"plain","computed":true},"vxlan_ids":{"type":["list","number"],"description":"UUIDs of attached VLANs","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_precreated_ip_block":{"version":0,"block":{"attributes":{"address":{"type":"string","description_kind":"plain","computed":true},"address_family":{"type":"number","description":"4 or 6, depending on which block you are looking for.","description_kind":"plain","required":true},"cidr":{"type":"number","description":"Length of CIDR prefix of the block as integer","description_kind":"plain","computed":true},"cidr_notation":{"type":"string","description":"CIDR notation of the looked up block.","description_kind":"plain","computed":true},"facility":{"type":"string","description":"Facility of the searched block. (for non-global blocks).","description_kind":"plain","optional":true},"gateway":{"type":"string","description_kind":"plain","computed":true},"global":{"type":"bool","description":"Whether to look for global block. Default is false for backward compatibility.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"manageable":{"type":"bool","description_kind":"plain","computed":true},"management":{"type":"bool","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro of the searched block (for non-global blocks).","description_kind":"plain","optional":true},"netmask":{"type":"string","description":"Mask in decimal notation, e.g. 255.255.255.0","description_kind":"plain","computed":true},"network":{"type":"string","description":"Network IP address portion of the block specification","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of the project where the searched block should be.","description_kind":"plain","required":true},"public":{"type":"bool","description":"Whether to look for public or private block.","description_kind":"plain","required":true},"quantity":{"type":"number","description_kind":"plain","computed":true},"type":{"type":"string","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_project":{"version":0,"block":{"attributes":{"backend_transfer":{"type":"bool","description":"Whether Backend Transfer is enabled for this project","description_kind":"plain","computed":true},"bgp_config":{"type":["list",["object",{"asn":"number","deployment_type":"string","max_prefix":"number","md5":"string","status":"string"}]],"description":"Optional BGP settings. Refer to [Equinix Metal guide for BGP](https://metal.equinix.com/developers/docs/networking/local-global-bgp/)","description_kind":"plain","computed":true},"created":{"type":"string","description":"The timestamp for when the project was created","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name which is used to look up the project","description_kind":"plain","optional":true,"computed":true},"organization_id":{"type":"string","description":"The UUID of this project's parent organization","description_kind":"plain","computed":true},"payment_method_id":{"type":"string","description":"The UUID of payment method for this project","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The UUID by which to look up the project","description_kind":"plain","optional":true,"computed":true},"updated":{"type":"string","description":"The timestamp for the last time the project was updated","description_kind":"plain","computed":true},"user_ids":{"type":["list","string"],"description":"List of UUIDs of user accounts which belong to this project","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_project_ssh_key":{"version":0,"block":{"attributes":{"created":{"type":"string","description_kind":"plain","computed":true},"fingerprint":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description":"The id of the SSH Key","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The label of the Equinix Metal SSH Key","description_kind":"plain","computed":true},"owner_id":{"type":"string","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The Equinix Metal project id of the Equinix Metal SSH Key","description_kind":"plain","required":true},"public_key":{"type":"string","description":"The public SSH key that will be authorized for SSH access on Equinix Metal devices provisioned with this key","description_kind":"plain","computed":true},"search":{"type":"string","description":"The name, fingerprint, id, or public_key of the SSH Key to search for in the Equinix Metal project","description_kind":"plain","optional":true},"updated":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_reserved_ip_block":{"version":0,"block":{"attributes":{"address":{"type":"string","description_kind":"plain","computed":true},"address_family":{"type":"number","description":"4 or 6","description_kind":"plain","computed":true},"cidr":{"type":"number","description":"Length of CIDR prefix of the block as integer","description_kind":"plain","computed":true},"cidr_notation":{"type":"string","description":"CIDR notation of the looked up block","description_kind":"plain","computed":true},"facility":{"type":"string","description":"Facility of the block. (for non-global blocks)","description_kind":"plain","computed":true},"gateway":{"type":"string","description":"IP address of gateway for the block","description_kind":"plain","computed":true},"global":{"type":"bool","description":"Addresses from block are attachable in all locations","description_kind":"plain","computed":true},"id":{"type":"string","description":"ID of the block to look up","description_kind":"plain","optional":true,"computed":true},"ip_address":{"type":"string","description":"Find block containing this IP address in given project","description_kind":"plain","optional":true},"manageable":{"type":"bool","description_kind":"plain","computed":true},"management":{"type":"bool","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro of the block (for non-global blocks)","description_kind":"plain","computed":true},"netmask":{"type":"string","description":"Mask in decimal notation, e.g. 255.255.255.0","description_kind":"plain","computed":true},"network":{"type":"string","description":"Network IP address portion of the block specification","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of the project where the searched block should be","description_kind":"plain","optional":true,"computed":true},"public":{"type":"bool","description":"Addresses from public block are routeable from the Internet","description_kind":"plain","computed":true},"quantity":{"type":"number","description_kind":"plain","computed":true},"type":{"type":"string","description":"Address type, one of public_ipv4, public_ipv6, private_ipv4, global_ipv4, and vrf","description_kind":"plain","computed":true},"vrf_id":{"type":"number","description":"VRF ID of the block when type=vrf","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_spot_market_price":{"version":0,"block":{"attributes":{"facility":{"type":"string","description":"Name of the facility","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"Name of the metro","description_kind":"plain","optional":true},"plan":{"type":"string","description":"Name of the plan","description_kind":"plain","required":true},"price":{"type":"number","description":"Current spot market price for given plan in given facility","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_spot_market_request":{"version":0,"block":{"attributes":{"device_ids":{"type":["list","string"],"description":"List of IDs of devices spawned by the referenced Spot Market Request","description_kind":"plain","computed":true},"devices_max":{"type":"number","description":"Maximum number devices to be created","description_kind":"plain","computed":true},"devices_min":{"type":"number","description":"Miniumum number devices to be created","description_kind":"plain","computed":true},"end_at":{"type":"string","description":"Date and time When the spot market request will be ended.","description_kind":"plain","computed":true},"facilities":{"type":["list","string"],"description":"Facility IDs where devices should be created","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"max_bid_price":{"type":"number","description":"Maximum price user is willing to pay per hour per device","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro where devices should be created.","description_kind":"plain","computed":true},"plan":{"type":"string","description":"The device plan slug.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"Project ID","description_kind":"plain","computed":true},"request_id":{"type":"string","description":"The id of the Spot Market Request","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"default":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_virtual_circuit":{"version":0,"block":{"attributes":{"connection_id":{"type":"string","description":"UUID of Connection where the VC is scoped to","description_kind":"plain","computed":true},"customer_ip":{"type":"string","description":"The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet.","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description of the virtual circuit","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"md5":{"type":"string","description":"The password that can be set for the VRF BGP peer","description_kind":"plain","computed":true,"sensitive":true},"metal_ip":{"type":"string","description":"The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet.","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the virtual circuit","description_kind":"plain","computed":true},"nni_vlan":{"type":"number","description":"Nni VLAN parameter, see https://metal.equinix.com/developers/docs/networking/fabric/","description_kind":"plain","computed":true},"nni_vnid":{"type":"number","description":"Nni VLAN ID parameter, see https://metal.equinix.com/developers/docs/networking/fabric/","description_kind":"plain","computed":true},"peer_asn":{"type":"number","description":"The BGP ASN of the peer. The same ASN may be the used across several VCs, but it cannot be the same as the local_asn of the VRF.","description_kind":"plain","computed":true},"port_id":{"type":"string","description":"UUID of the Connection Port where the VC is scoped to","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of the projct to which the virtual circuit belongs","description_kind":"plain","computed":true},"speed":{"type":"string","description":"Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared.","description_kind":"plain","computed":true},"status":{"type":"string","description":"Status of the virtual circuit","description_kind":"plain","computed":true},"subnet":{"type":"string","description":"A subnet from one of the IP blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /30 or /31.\n\t\t\t\t * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip.\n\t\t\t\t * For a /30 block, it will have four IP addresses, but the first and last IP addresses are not usable. We will default to the first usable IP address for the metal_ip.","description_kind":"plain","computed":true},"tags":{"type":["list","string"],"description":"Tags attached to the virtual circuit","description_kind":"plain","computed":true},"virtual_circuit_id":{"type":"string","description":"ID of the virtual circuit to lookup","description_kind":"plain","required":true},"vlan_id":{"type":"string","description":"UUID of the associated VLAN","description_kind":"plain","computed":true},"vnid":{"type":"number","description":"VNID VLAN parameter, see https://metal.equinix.com/developers/docs/networking/fabric/","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description":"UUID of the associated VRF","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_vlan":{"version":0,"block":{"attributes":{"assigned_devices_ids":{"type":["list","string"],"description":"List of device IDs to which this VLAN is assigned","description_kind":"plain","computed":true},"description":{"type":"string","description":"VLAN description text","description_kind":"plain","computed":true},"facility":{"type":"string","description":"Facility where the VLAN is deployed","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"Metro where the VLAN is deployed","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"ID of parent project of the VLAN. Use together with vxlan and metro or facility","description_kind":"plain","optional":true,"computed":true},"vlan_id":{"type":"string","description":"Metal UUID of the VLAN resource","description_kind":"plain","optional":true,"computed":true},"vxlan":{"type":"number","description":"VXLAN numner of the VLAN. Unique in a project and facility or metro. Use with project_id","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"equinix_metal_vrf":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description of the VRF","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_ranges":{"type":["set","string"],"description":"All IPv4 and IPv6 Ranges that will be available to BGP Peers. IPv4 addresses must be /8 or smaller with a minimum size of /29. IPv6 must be /56 or smaller with a minimum size of /64. Ranges must not overlap other ranges within the VRF.","description_kind":"plain","computed":true},"local_asn":{"type":"number","description":"The 4-byte ASN set on the VRF.","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro Code","description_kind":"plain","computed":true},"name":{"type":"string","description":"User-supplied name of the VRF, unique to the project","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"Project ID","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description":"ID of the VRF to lookup","description_kind":"plain","required":true}},"description_kind":"plain"}},"equinix_network_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Account location metro cod","description_kind":"plain","required":true},"name":{"type":"string","description":"Account name for filtering","description_kind":"plain","optional":true,"computed":true},"number":{"type":"string","description":"Account unique number","description_kind":"plain","computed":true},"status":{"type":"string","description":"Account status for filtering. Possible values are Active, Processing, Submitted, Staged","description_kind":"plain","optional":true,"computed":true},"ucm_id":{"type":"string","description":"Account unique identifier","description_kind":"plain","computed":true}},"description":"Use this data source to get number and identifier of Equinix Network Edge billing account in a given metro location","description_kind":"plain"}},"equinix_network_device":{"version":0,"block":{"attributes":{"account_number":{"type":"string","description":"Device billing account number","description_kind":"plain","computed":true},"acl_template_id":{"type":"string","description":"Unique identifier of applied ACL template","description_kind":"plain","computed":true},"additional_bandwidth":{"type":"number","description":"Additional Internet bandwidth, in Mbps, that will be allocated to the device","description_kind":"plain","computed":true},"asn":{"type":"number","description":"Autonomous system number","description_kind":"plain","computed":true},"byol":{"type":"bool","description":"Boolean value that determines device licensing mode: bring your own license or subscription (default)","description_kind":"plain","computed":true},"cluster_details":{"type":["list",["object",{"cluster_id":"string","cluster_name":"string","node0":["list",["object",{"license_file_id":"string","license_token":"string","name":"string","uuid":"string","vendor_configuration":["list",["object",{"activation_key":"string","admin_password":"string","controller1":"string","controller_fqdn":"string","hostname":"string","root_password":"string"}]]}]],"node1":["list",["object",{"license_file_id":"string","license_token":"string","name":"string","uuid":"string","vendor_configuration":["list",["object",{"activation_key":"string","admin_password":"string","controller1":"string","controller_fqdn":"string","hostname":"string","root_password":"string"}]]}]],"num_of_nodes":"number"}]],"description":"An object that has the cluster details","description_kind":"plain","computed":true},"core_count":{"type":"number","description":"Number of CPU cores used by device","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"Device hostname prefix","description_kind":"plain","computed":true},"ibx":{"type":"string","description":"Device location Equinix Business Exchange name","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"interface":{"type":["list",["object",{"assigned_type":"string","id":"number","ip_address":"string","mac_address":"string","name":"string","operational_status":"string","status":"string","type":"string"}]],"description":"List of device interfaces","description_kind":"plain","computed":true},"interface_count":{"type":"number","description":"Number of network interfaces on a device. If not specified, default number for a given device type will be used","description_kind":"plain","computed":true},"license_file":{"type":"string","description":"Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode","description_kind":"plain","computed":true},"license_file_id":{"type":"string","description":"Unique identifier of applied license file","description_kind":"plain","computed":true},"license_status":{"type":"string","description":"Device license registration status","description_kind":"plain","computed":true},"license_token":{"type":"string","description":"License Token applicable for some device types in BYOL licensing mode","description_kind":"plain","computed":true},"metro_code":{"type":"string","description":"Device location metro code","description_kind":"plain","computed":true},"mgmt_acl_template_uuid":{"type":"string","description":"Unique identifier of applied MGMT ACL template","description_kind":"plain","computed":true},"name":{"type":"string","description":"Device name","description_kind":"plain","optional":true,"computed":true},"notifications":{"type":["set","string"],"description":"List of email addresses that will receive device status notifications","description_kind":"plain","computed":true},"order_reference":{"type":"string","description":"Name/number used to identify device order on the invoice","description_kind":"plain","computed":true},"package_code":{"type":"string","description":"Device software package code","description_kind":"plain","computed":true},"purchase_order_number":{"type":"string","description":"Purchase order number associated with a device order","description_kind":"plain","computed":true},"redundancy_type":{"type":"string","description":"Device redundancy type applicable for HA devices, either primary or secondary","description_kind":"plain","computed":true},"redundant_id":{"type":"string","description":"Unique identifier for a redundant device, applicable for HA device","description_kind":"plain","computed":true},"region":{"type":"string","description":"Device location region","description_kind":"plain","computed":true},"secondary_device":{"type":["list",["object",{"account_number":"string","acl_template_id":"string","additional_bandwidth":"number","asn":"number","hostname":"string","ibx":"string","interface":["list",["object",{"assigned_type":"string","id":"number","ip_address":"string","mac_address":"string","name":"string","operational_status":"string","status":"string","type":"string"}]],"license_file":"string","license_file_id":"string","license_status":"string","license_token":"string","metro_code":"string","mgmt_acl_template_uuid":"string","name":"string","notifications":["set","string"],"redundancy_type":"string","redundant_id":"string","region":"string","ssh_ip_address":"string","ssh_ip_fqdn":"string","ssh_key":["set",["object",{"key_name":"string","username":"string"}]],"status":"string","uuid":"string","vendor_configuration":["map","string"],"wan_interface_id":"string","zone_code":"string"}]],"description":"Definition of secondary device applicable for HA setup","description_kind":"plain","computed":true},"self_managed":{"type":"bool","description":"Boolean value that determines device management mode: self-managed or subscription (default)","description_kind":"plain","computed":true},"ssh_ip_address":{"type":"string","description":"IP address of SSH enabled interface on the device","description_kind":"plain","computed":true},"ssh_ip_fqdn":{"type":"string","description":"FQDN of SSH enabled interface on the device","description_kind":"plain","computed":true},"ssh_key":{"type":["set",["object",{"key_name":"string","username":"string"}]],"description":"Definition of SSH key that will be provisioned on a device","description_kind":"plain","computed":true},"status":{"type":"string","description":"Device provisioning status","description_kind":"plain","computed":true},"term_length":{"type":"number","description":"Device term length","description_kind":"plain","computed":true},"throughput":{"type":"number","description":"Device license throughput","description_kind":"plain","computed":true},"throughput_unit":{"type":"string","description":"Device license throughput unit (Mbps or Gbps)","description_kind":"plain","computed":true},"type_code":{"type":"string","description":"Device type code","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Device unique identifier","description_kind":"plain","optional":true,"computed":true},"valid_status_list":{"type":"string","description":"Comma Separated List of states to be considered valid when searching by name","description_kind":"plain","optional":true},"vendor_configuration":{"type":["map","string"],"description":"Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress)","description_kind":"plain","computed":true},"version":{"type":"string","description":"Device software software version","description_kind":"plain","computed":true},"wan_interface_id":{"type":"string","description":"device interface id picked for WAN","description_kind":"plain","computed":true},"zone_code":{"type":"string","description":"Device location zone code","description_kind":"plain","computed":true}},"description":"Use this data source to get details of Equinix Network Edge network device with a given Name or UUID","description_kind":"plain"}},"equinix_network_device_platform":{"version":0,"block":{"attributes":{"core_count":{"type":"number","description":"Number of CPU cores used to limit platform search results","description_kind":"plain","optional":true,"computed":true},"device_type":{"type":"string","description":"Device type code","description_kind":"plain","required":true},"flavor":{"type":"string","description":"Device platform flavor that determines number of CPU cores and memory. Supported values: small, medium, large, xlarge","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"license_options":{"type":["set","string"],"description":"List of device licensing options to limit platform search result. Supported values: BYOL (Bring Your Own License), Sub (license subscription)","description_kind":"plain","optional":true,"computed":true},"management_types":{"type":["set","string"],"description":"List of device management types to limit platform search results. Supported values: EQUINIX-CONFIGURED, SELF-CONFIGURED","description_kind":"plain","optional":true,"computed":true},"memory":{"type":"number","description":"The amount of memory provided by device platform","description_kind":"plain","computed":true},"memory_unit":{"type":"string","description":"Unit of memory provider by device platform","description_kind":"plain","computed":true},"packages":{"type":["set","string"],"description":"List of software package codes to limit platform search results","description_kind":"plain","optional":true,"computed":true}},"description":"Use this data source to get Equinix Network Edge device platform configuration details for a given device type","description_kind":"plain"}},"equinix_network_device_software":{"version":0,"block":{"attributes":{"date":{"type":"string","description":"Version release date","description_kind":"plain","computed":true},"device_type":{"type":"string","description":"Code of a device type","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"image_name":{"type":"string","description":"Software image name","description_kind":"plain","computed":true},"most_recent":{"type":"bool","description":"Boolean value to indicate that most recent version should be used, in case when more than one result is returned","description_kind":"plain","optional":true},"packages":{"type":["set","string"],"description":"Limits returned versions to those that are supported by given software package codes","description_kind":"plain","optional":true,"computed":true},"release_notes_link":{"type":"string","description":"Link to version release notes","description_kind":"plain","computed":true},"stable":{"type":"bool","description":"Boolean value to limit query results to stable versions only","description_kind":"plain","optional":true,"computed":true},"status":{"type":"string","description":"Version status","description_kind":"plain","computed":true},"version":{"type":"string","description":"Software version","description_kind":"plain","computed":true},"version_regex":{"type":"string","description":"A regex string to apply on returned versions and filter search results","description_kind":"plain","optional":true}},"description":"Use this data source to get Equinix Network Edge device software details for a given device type.","description_kind":"plain"}},"equinix_network_device_type":{"version":0,"block":{"attributes":{"category":{"type":"string","description":"Device type category, one of: Router, Firewall, SDWAN","description_kind":"plain","optional":true,"computed":true},"code":{"type":"string","description":"Device type short code, unique identifier of a network device type","description_kind":"plain","computed":true},"description":{"type":"string","description":"Device type textual description","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_codes":{"type":["set","string"],"description":"List of metro codes where device type has to be available","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Device type name","description_kind":"plain","optional":true,"computed":true},"vendor":{"type":"string","description":"Device type vendor i.e. Cisco, Juniper Networks, VERSA Networks","description_kind":"plain","optional":true,"computed":true}},"description":"Use this data source to get Equinix Network Edge device type details","description_kind":"plain"}}}}}} +{"format_version":"1.0","provider_schemas":{"registry.terraform.io/equinix/equinix":{"provider":{"version":0,"block":{"attributes":{"auth_token":{"type":"string","description":"The Equinix Metal API auth key for API operations","description_kind":"plain","optional":true},"client_id":{"type":"string","description":"API Consumer Key available under My Apps section in developer portal","description_kind":"plain","optional":true},"client_secret":{"type":"string","description":"API Consumer secret available under My Apps section in developer portal","description_kind":"plain","optional":true},"endpoint":{"type":"string","description":"The Equinix API base URL to point out desired environment. Defaults to https://api.equinix.com","description_kind":"plain","optional":true},"max_retries":{"type":"number","description_kind":"plain","optional":true},"max_retry_wait_seconds":{"type":"number","description_kind":"plain","optional":true},"request_timeout":{"type":"number","description":"The duration of time, in seconds, that the Equinix Platform API Client should wait before canceling an API request. Defaults to 30","description_kind":"plain","optional":true},"response_max_page_size":{"type":"number","description":"The maximum number of records in a single response for REST queries that produce paginated responses","description_kind":"plain","optional":true},"token":{"type":"string","description":"API token from the developer sandbox","description_kind":"plain","optional":true}},"description_kind":"plain"}},"resource_schemas":{"equinix_ecx_l2_connection":{"version":0,"block":{"attributes":{"actions":{"type":["set",["object",{"message":"string","operation_id":"string","required_data":["set",["object",{"editable":"bool","key":"string","label":"string","validation_pattern":"string","value":"string"}]],"type":"string"}]],"description":"One or more pending actions to complete connection provisioning","description_kind":"plain","computed":true},"authorization_key":{"type":"string","description":"Text field used to authorize connection on the provider side. Value depends on a provider service profile used for connection","description_kind":"plain","optional":true,"computed":true},"device_interface_id":{"type":"number","description":"Identifier of network interface on a given device, used for a connection. If not specified then first available interface will be selected","description_kind":"plain","optional":true},"device_uuid":{"type":"string","description":"Unique identifier of the Network Edge virtual device from which the connection would originate","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","required":true},"named_tag":{"type":"string","description":"The type of peering to set up in case when connecting to Azure Express Route. One of PRIVATE, MICROSOFT, MANUAL, PUBLIC (MANUAL and PUBLIC are deprecated and not available for new connections)","description_kind":"plain","optional":true},"notifications":{"type":["set","string"],"description":"A list of email addresses used for sending connection update notifications","description_kind":"plain","required":true},"port_uuid":{"type":"string","description":"Unique identifier of the buyer's port from which the connection would originate","description_kind":"plain","optional":true,"computed":true},"profile_uuid":{"type":"string","description":"Unique identifier of the service provider's service profile","description_kind":"plain","optional":true,"computed":true},"provider_status":{"type":"string","description":"Connection provisioning status on service provider's side","description_kind":"plain","computed":true},"purchase_order_number":{"type":"string","description":"Connection's purchase order number to reflect on the invoice","description_kind":"plain","optional":true},"redundancy_group":{"type":"string","description":"Unique identifier of group containing a primary and secondary connection","description_kind":"plain","computed":true},"redundancy_type":{"type":"string","description":"Connection redundancy type, applicable for HA connections. Either primary or secondary","description_kind":"plain","computed":true},"redundant_uuid":{"type":"string","description":"Unique identifier of the redundant connection, applicable for HA connections","description_kind":"plain","computed":true},"seller_metro_code":{"type":"string","description":"The metro code that denotes the connection's remote side (z-side)","description_kind":"plain","optional":true,"computed":true},"seller_region":{"type":"string","description":"The region in which the seller port resides","description_kind":"plain","optional":true},"service_token":{"type":"string","description":"Unique Equinix Fabric key given by a provider that grants you authorization to enable connectivity from a shared multi-tenant port (a-side)","description_kind":"plain","optional":true},"speed":{"type":"number","description":"Speed/Bandwidth to be allocated to the connection","description_kind":"plain","required":true},"speed_unit":{"type":"string","description":"Unit of the speed/bandwidth to be allocated to the connection","description_kind":"plain","required":true},"status":{"type":"string","description":"Connection provisioning status on Equinix Fabric side","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Unique identifier of the connection","description_kind":"plain","computed":true},"vendor_token":{"type":"string","description":"The Equinix Fabric Token the connection was created with. Applicable if the connection was created with a ServiceToken (a-side) or ZSideServiceToken (z-side)","description_kind":"plain","computed":true},"vlan_ctag":{"type":"number","description":"C-Tag/Inner-Tag of the connection, a numeric character ranging from 2 - 4094","description_kind":"plain","optional":true},"vlan_stag":{"type":"number","description":"S-Tag/Outer-Tag of the connection, a numeric character ranging from 2 - 4094","description_kind":"plain","optional":true,"computed":true},"zside_port_uuid":{"type":"string","description":"Unique identifier of the port on the remote side (z-side)","description_kind":"plain","optional":true,"computed":true},"zside_service_token":{"type":"string","description":"Unique Equinix Fabric key given by a provider that grants you authorization to enable connectivity to a shared multi-tenant port (z-side)","description_kind":"plain","optional":true},"zside_vlan_ctag":{"type":"number","description":"C-Tag/Inner-Tag of the connection on the remote side (z-side)","description_kind":"plain","optional":true,"computed":true},"zside_vlan_stag":{"type":"number","description":"S-Tag/Outer-Tag of the connection on the remote side (z-side)","description_kind":"plain","optional":true,"computed":true}},"block_types":{"additional_info":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description":"Additional information key","description_kind":"plain","required":true},"value":{"type":"string","description":"Additional information value","description_kind":"plain","required":true}},"description":"One or more additional information key-value objects","description_kind":"plain"}},"secondary_connection":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["set",["object",{"message":"string","operation_id":"string","required_data":["set",["object",{"editable":"bool","key":"string","label":"string","validation_pattern":"string","value":"string"}]],"type":"string"}]],"description":"One or more pending actions to complete connection provisioning","description_kind":"plain","computed":true},"authorization_key":{"type":"string","description":"Text field used to authorize connection on the provider side. Value depends on a provider service profile used for connection","description_kind":"plain","optional":true,"computed":true},"device_interface_id":{"type":"number","description":"Identifier of network interface on a given device, used for a connection. If not specified then first available interface will be selected","description_kind":"plain","optional":true,"computed":true},"device_uuid":{"type":"string","description":"Unique identifier of the Network Edge virtual device from which the connection would originate","description_kind":"plain","optional":true},"name":{"type":"string","description":"Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","required":true},"port_uuid":{"type":"string","description":"Unique identifier of the buyer's port from which the connection would originate","description_kind":"plain","optional":true,"computed":true},"profile_uuid":{"type":"string","description":"Unique identifier of the service provider's service profile","description_kind":"plain","optional":true,"computed":true},"provider_status":{"type":"string","description":"Connection provisioning status on service provider's side","description_kind":"plain","computed":true},"redundancy_group":{"type":"string","description":"Unique identifier of group containing a primary and secondary connection","description_kind":"plain","computed":true},"redundancy_type":{"type":"string","description":"Connection redundancy type, applicable for HA connections. Either primary or secondary","description_kind":"plain","computed":true},"redundant_uuid":{"type":"string","description":"Unique identifier of the redundant connection, applicable for HA connections","description_kind":"plain","deprecated":true,"computed":true},"seller_metro_code":{"type":"string","description":"The metro code that denotes the connection's remote side (z-side)","description_kind":"plain","optional":true,"computed":true},"seller_region":{"type":"string","description":"The region in which the seller port resides","description_kind":"plain","optional":true,"computed":true},"service_token":{"type":"string","description":"Unique Equinix Fabric key given by a provider that grants you authorization to enable connectivity from a shared multi-tenant port (a-side)","description_kind":"plain","optional":true},"speed":{"type":"number","description":"Speed/Bandwidth to be allocated to the connection","description_kind":"plain","optional":true,"computed":true},"speed_unit":{"type":"string","description":"Unit of the speed/bandwidth to be allocated to the connection","description_kind":"plain","optional":true,"computed":true},"status":{"type":"string","description":"Connection provisioning status on Equinix Fabric side","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Unique identifier of the connection","description_kind":"plain","computed":true},"vendor_token":{"type":"string","description":"The Equinix Fabric Token the connection was created with. Applicable if the connection was created with a ServiceToken (a-side) or ZSideServiceToken (z-side)","description_kind":"plain","computed":true},"vlan_ctag":{"type":"number","description":"C-Tag/Inner-Tag of the connection, a numeric character ranging from 2 - 4094","description_kind":"plain","optional":true},"vlan_stag":{"type":"number","description":"S-Tag/Outer-Tag of the connection, a numeric character ranging from 2 - 4094","description_kind":"plain","optional":true,"computed":true},"zside_port_uuid":{"type":"string","description":"Unique identifier of the port on the remote side (z-side)","description_kind":"plain","computed":true},"zside_vlan_ctag":{"type":"number","description":"C-Tag/Inner-Tag of the connection on the remote side (z-side)","description_kind":"plain","computed":true},"zside_vlan_stag":{"type":"number","description":"S-Tag/Outer-Tag of the connection on the remote side (z-side)","description_kind":"plain","computed":true}},"description":"Definition of secondary connection for redundant, HA connectivity","description_kind":"plain"},"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}},"description_kind":"plain"}}},"description":"Resource allows creation and management of Equinix Fabric\tlayer 2 connections","description_kind":"plain"}},"equinix_ecx_l2_connection_accepter":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"Access Key used to accept connection on provider side","description_kind":"plain","optional":true,"computed":true,"sensitive":true},"aws_connection_id":{"type":"string","description":"Identifier of a hosted Direct Connect connection on AWS side, applicable for accepter resource with connections to AWS only","description_kind":"plain","computed":true},"aws_profile":{"type":"string","description":"AWS Profile Name for retrieving credentials from shared credentials file","description_kind":"plain","optional":true},"connection_id":{"type":"string","description":"Identifier of layer 2 connection that will be accepted","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"secret_key":{"type":"string","description":"Secret Key used to accept connection on provider side","description_kind":"plain","optional":true,"computed":true,"sensitive":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Resource is used to accept Equinix Fabric layer 2 connection on provider side","description_kind":"plain","deprecated":true}},"equinix_ecx_l2_serviceprofile":{"version":0,"block":{"attributes":{"api_integration":{"type":"bool","description":"Specifies the API integration ID that was provided to the customer during onboarding","description_kind":"plain","optional":true},"authkey_label":{"type":"string","description":"Name of the authentication key label to be used by the Authentication Key service","description_kind":"plain","optional":true},"bandwidth_alert_threshold":{"type":"number","description":"Specifies the port bandwidth threshold percentage. If the bandwidth limit is met or exceeded, an alert is sent to the seller","description_kind":"plain","optional":true},"bandwidth_threshold_notifications":{"type":["set","string"],"description":"A list of email addresses that will receive notifications about bandwidth thresholds","description_kind":"plain","required":true},"connection_name_label":{"type":"string","description":"Custom name used for calling a connections i.e. circuit. Defaults to Connection","description_kind":"plain","optional":true},"ctag_label":{"type":"string","description":"C-Tag/Inner-Tag label name for the connections","description_kind":"plain","optional":true},"description":{"type":"string","description":"Description of the service profile","description_kind":"plain","optional":true},"equinix_managed_port_vlan":{"type":"bool","description":"Boolean value that indicates whether the port and VLAN details are managed by Equinix","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"integration_id":{"type":"string","description":"Specifies the API integration ID that was provided to the customer during onboarding","description_kind":"plain","optional":true},"name":{"type":"string","description":"Name of the service profile. An alpha-numeric 50 characters string which can include only hyphens and underscores","description_kind":"plain","required":true},"oversubscription":{"type":"string","description":"Oversubscription limit that will cause alerting. Default is 1x","description_kind":"plain","optional":true},"oversubscription_allowed":{"type":"bool","description":"Boolean value that determines if, regardless of the utilization, Equinix Fabric will continue to add connections to your links until we reach the oversubscription limit","description_kind":"plain","optional":true},"private":{"type":"bool","description":"Boolean value that indicates whether or not this is a private profile.","description_kind":"plain","optional":true},"private_user_emails":{"type":["set","string"],"description":"A list of email addresses associated to users that will be allowed to access this service profile. Applicable for private profiles","description_kind":"plain","optional":true},"profile_statuschange_notifications":{"type":["set","string"],"description":"A list of email addresses that will receive notifications about profile status changes","description_kind":"plain","required":true},"redundancy_required":{"type":"bool","description":"Boolean value that determines if yourconnections will require redundancy","description_kind":"plain","optional":true},"secondary_vlan_from_primary":{"type":"bool","description":"Indicates whether the VLAN ID of the secondary connection is the same as the primary connection","description_kind":"plain","optional":true},"servicekey_autogenerated":{"type":"bool","description":"Boolean value that indicates whether multiple connections can be created with the same authorization key","description_kind":"plain","optional":true},"speed_customization_allowed":{"type":"bool","description":"Boolean value that determines if customer is allowed to enter a custom connection speed","description_kind":"plain","optional":true},"speed_from_api":{"type":"bool","description":"Boolean valuta that determines if connection speed will be derived from an API call","description_kind":"plain","optional":true},"state":{"type":"string","description":"Service profile provisioning status","description_kind":"plain","computed":true},"tag_type":{"type":"string","description":"Specifies additional tagging information required by the seller profile for Dot1Q to QinQ translation","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Unique identifier of the service profile","description_kind":"plain","computed":true},"vc_statuschange_notifications":{"type":["set","string"],"description":"A list of email addresses that will receive notifications about connections approvals and rejections","description_kind":"plain","required":true}},"block_types":{"features":{"nesting_mode":"set","block":{"attributes":{"allow_remote_connections":{"type":"bool","description":"Indicates whether or not connections to this profile can be created from remote metro locations","description_kind":"plain","required":true},"test_profile":{"type":"bool","description":"Indicates whether or not this profile can be used for test connections","description_kind":"plain","deprecated":true,"optional":true}},"description":"Block of profile features configuration","description_kind":"plain"},"min_items":1,"max_items":1},"port":{"nesting_mode":"set","block":{"attributes":{"metro_code":{"type":"string","description":"Port location metro code","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Unique identifier of the port","description_kind":"plain","required":true}},"description":"One or more definitions of ports associated with the profile","description_kind":"plain"},"min_items":1},"speed_band":{"nesting_mode":"set","block":{"attributes":{"speed":{"type":"number","description":"Speed/bandwidth supported by given service profile","description_kind":"plain","required":true},"speed_unit":{"type":"string","description":"Unit of the speed/bandwidth supported by given service profile","description_kind":"plain","required":true}},"description":"One or more definitions of supported speed/bandwidth configurations","description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_bgp_session":{"version":0,"block":{"attributes":{"address_family":{"type":"string","description":"ipv4 or ipv6","description_kind":"plain","required":true},"default_route":{"type":"bool","description":"Boolean flag to set the default route policy. False by default","description_kind":"plain","optional":true},"device_id":{"type":"string","description":"ID of device","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"status":{"type":"string","description":"Status of the session - up or down","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_connection":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description of the connection resource","description_kind":"plain","optional":true},"facility":{"type":"string","description":"Facility where the connection will be created","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"Metro where the connection will be created","description_kind":"plain","optional":true,"computed":true},"mode":{"type":"string","description":"Mode for connections in IBX facilities with the dedicated type - standard or tunnel","description_kind":"plain","optional":true},"name":{"type":"string","description":"Name of the connection resource","description_kind":"plain","required":true},"organization_id":{"type":"string","description":"ID of the organization responsible for the connection. Applicable with type \"dedicated\"","description_kind":"plain","optional":true,"computed":true},"ports":{"type":["list",["object",{"id":"string","link_status":"string","name":"string","role":"string","speed":"number","status":"string","virtual_circuit_ids":["list","string"]}]],"description":"List of connection ports - primary (`ports[0]`) and secondary (`ports[1]`)","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of the project where the connection is scoped to. Required with type \"shared\"","description_kind":"plain","optional":true},"redundancy":{"type":"string","description":"Connection redundancy - redundant or primary","description_kind":"plain","required":true},"service_token_type":{"type":"string","description":"Only used with shared connection. Type of service token to use for the connection, a_side or z_side","description_kind":"plain","optional":true},"service_tokens":{"type":["list",["object",{"expires_at":"string","id":"string","max_allowed_speed":"string","role":"string","state":"string","type":"string"}]],"description":"Only used with shared connection. List of service tokens required to continue the setup process with [equinix_ecx_l2_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard)","description_kind":"plain","computed":true},"speed":{"type":"string","description":"Port speed. Allowed values are 50Mbps, 200Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps, 10Gbps","description_kind":"plain","required":true},"status":{"type":"string","description":"Status of the connection resource","description_kind":"plain","computed":true},"tags":{"type":["list","string"],"description":"Tags attached to the connection","description_kind":"plain","optional":true},"token":{"type":"string","description":"Only used with shared connection. Fabric Token required to continue the setup process with [equinix_ecx_l2_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard)","description_kind":"plain","deprecated":true,"computed":true},"type":{"type":"string","description":"Connection type - dedicated or shared","description_kind":"plain","required":true},"vlans":{"type":["list","number"],"description":"Only used with shared connection. VLANs to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection","description_kind":"plain","optional":true}},"description_kind":"plain"}},"equinix_metal_device":{"version":0,"block":{"attributes":{"access_private_ipv4":{"type":"string","description":"The ipv4 private IP assigned to the device","description_kind":"plain","computed":true},"access_public_ipv4":{"type":"string","description":"The ipv4 maintenance IP assigned to the device","description_kind":"plain","computed":true},"access_public_ipv6":{"type":"string","description":"The ipv6 maintenance IP assigned to the device","description_kind":"plain","computed":true},"always_pxe":{"type":"bool","description":"If true, a device with OS custom_ipxe will","description_kind":"plain","optional":true},"billing_cycle":{"type":"string","description":"monthly or hourly","description_kind":"plain","optional":true,"computed":true},"created":{"type":"string","description":"The timestamp for when the device was created","description_kind":"plain","computed":true},"custom_data":{"type":"string","description":"A string of the desired Custom Data for the device","description_kind":"plain","optional":true,"sensitive":true},"deployed_facility":{"type":"string","description":"The facility where the device is deployed","description_kind":"plain","computed":true},"deployed_hardware_reservation_id":{"type":"string","description":"ID of hardware reservation where this device was deployed. It is useful when using the next-available hardware reservation","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description string for the device","description_kind":"plain","optional":true},"facilities":{"type":["list","string"],"description":"List of facility codes with deployment preferences. Equinix Metal API will go through the list and will deploy your device to first facility with free capacity. List items must be facility codes or any (a wildcard). To find the facility code, visit [Facilities API docs](https://metal.equinix.com/developers/api/facilities/), set your API auth token in the top of the page and see JSON from the API response. Conflicts with metro","description_kind":"plain","optional":true},"force_detach_volumes":{"type":"bool","description":"Delete device even if it has volumes attached. Only applies for destroy action","description_kind":"plain","optional":true},"hardware_reservation_id":{"type":"string","description":"The UUID of the hardware reservation where you want this device deployed, or next-available if you want to pick your next available reservation automatically","description_kind":"plain","optional":true},"hostname":{"type":"string","description":"The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipxe_script_url":{"type":"string","description":"URL pointing to a hosted iPXE script. More","description_kind":"plain","optional":true},"locked":{"type":"bool","description":"Whether the device is locked","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro area for the new device. Conflicts with facilities","description_kind":"plain","optional":true},"network":{"type":["list",["object",{"address":"string","cidr":"number","family":"number","gateway":"string","public":"bool"}]],"description":"The device's private and public IP (v4 and v6) network details. When a device is run without any special network configuration, it will have 3 addresses: public ipv4, private ipv4 and ipv6","description_kind":"plain","computed":true},"network_type":{"type":"string","description":"Network type of a device, used in [Layer 2 networking](https://metal.equinix.com/developers/docs/networking/layer2/). Will be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded","description_kind":"plain","deprecated":true,"computed":true},"operating_system":{"type":"string","description":"The operating system slug. To find the slug, or visit [Operating Systems API docs](https://metal.equinix.com/developers/api/operatingsystems), set your API auth token in the top of the page and see JSON from the API response","description_kind":"plain","required":true},"plan":{"type":"string","description":"The device plan slug. To find the plan slug, visit [Device plans API docs](https://metal.equinix.com/developers/api/plans), set your auth token in the top of the page and see JSON from the API response","description_kind":"plain","required":true},"ports":{"type":["list",["object",{"bonded":"bool","id":"string","mac":"string","name":"string","type":"string"}]],"description":"Ports assigned to the device","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The ID of the project in which to create the device","description_kind":"plain","required":true},"project_ssh_key_ids":{"type":["list","string"],"description":"Array of IDs of the project SSH keys which should be added to the device. If you omit this, SSH keys of all the members of the parent project will be added to the device. If you specify this array, only the listed project SSH keys (and any user_ssh_key_ids) will be added. Project SSH keys can be created with the [equinix_metal_project_ssh_key](equinix_metal_project_ssh_key.md) resource","description_kind":"plain","optional":true},"root_password":{"type":"string","description":"Root password to the server (disabled after 24 hours)","description_kind":"plain","computed":true,"sensitive":true},"ssh_key_ids":{"type":["list","string"],"description":"List of IDs of SSH keys deployed in the device, can be both user and project SSH keys","description_kind":"plain","computed":true},"state":{"type":"string","description":"The status of the device","description_kind":"plain","computed":true},"storage":{"type":"string","description":"JSON for custom partitioning. Only usable on reserved hardware. More information in in the [Custom Partitioning and RAID](https://metal.equinix.com/developers/docs/servers/custom-partitioning-raid/) doc","description_kind":"plain","optional":true},"tags":{"type":["list","string"],"description":"Tags attached to the device","description_kind":"plain","optional":true},"termination_time":{"type":"string","description":"Timestamp for device termination. For example \"2021-09-03T16:32:00+03:00\". If you don't supply timezone info, timestamp is assumed to be in UTC.","description_kind":"plain","optional":true},"updated":{"type":"string","description":"The timestamp for the last time the device was updated","description_kind":"plain","computed":true},"user_data":{"type":"string","description":"A string of the desired User Data for the device","description_kind":"plain","optional":true,"sensitive":true},"user_ssh_key_ids":{"type":["list","string"],"description":"Array of IDs of the user SSH keys which should be added to the device. If you omit this, SSH keys of all the members of the parent project will be added to the device. If you specify this array, only the listed user SSH keys (and any project_ssh_key_ids) will be added. User SSH keys can be created with the [equinix_metal_ssh_key](equinix_metal_ssh_key.md) resource","description_kind":"plain","optional":true},"wait_for_reservation_deprovision":{"type":"bool","description":"Only used for devices in reserved hardware. If set, the deletion of this device will block until the hardware reservation is marked provisionable (about 4 minutes in August 2019)","description_kind":"plain","optional":true}},"block_types":{"ip_address":{"nesting_mode":"list","block":{"attributes":{"cidr":{"type":"number","description":"CIDR suffix for IP block assigned to this device","description_kind":"plain","optional":true},"reservation_ids":{"type":["list","string"],"description":"IDs of reservations to pick the blocks from","description_kind":"plain","optional":true},"type":{"type":"string","description":"one of public_ipv4,private_ipv4,public_ipv6","description_kind":"plain","required":true}},"description":"A list of IP address types for the device (structure is documented below)","description_kind":"plain"}},"reinstall":{"nesting_mode":"list","block":{"attributes":{"deprovision_fast":{"type":"bool","description":"Whether the OS disk should be filled with `00h` bytes before reinstall","description_kind":"plain","optional":true},"enabled":{"type":"bool","description":"Whether the device should be reinstalled instead of destroyed","description_kind":"plain","optional":true},"preserve_data":{"type":"bool","description":"Whether the non-OS disks should be kept or wiped during reinstall","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_device_network_type":{"version":0,"block":{"attributes":{"device_id":{"type":"string","description":"The ID of the device on which the network type should be set","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"type":{"type":"string","description":"Network type to set. Must be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded","description_kind":"plain","required":true}},"description_kind":"plain"}},"equinix_metal_gateway":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_reservation_id":{"type":"string","description":"UUID of the Public or VRF IP Reservation to associate, must be in the same metro as the VLAN","description_kind":"plain","optional":true},"private_ipv4_subnet_size":{"type":"number","description":"Size of the private IPv4 subnet to create for this gateway, one of [8 16 32 64 128]","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"UUID of the Project where the Gateway is scoped to","description_kind":"plain","required":true},"state":{"type":"string","description":"Status of the gateway resource","description_kind":"plain","computed":true},"vlan_id":{"type":"string","description":"UUID of the VLAN to associate","description_kind":"plain","required":true},"vrf_id":{"type":"string","description":"UUID of the VRF associated with the IP Reservation","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_ip_attachment":{"version":0,"block":{"attributes":{"address":{"type":"string","description_kind":"plain","computed":true},"address_family":{"type":"number","description":"Address family as integer (4 or 6)","description_kind":"plain","computed":true},"cidr":{"type":"number","description":"Length of CIDR prefix of the block as integer","description_kind":"plain","computed":true},"cidr_notation":{"type":"string","description_kind":"plain","required":true},"device_id":{"type":"string","description_kind":"plain","required":true},"gateway":{"type":"string","description_kind":"plain","computed":true},"global":{"type":"bool","description":"Flag indicating whether IP block is global, i.e. assignable in any location","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"manageable":{"type":"bool","description_kind":"plain","computed":true},"management":{"type":"bool","description_kind":"plain","computed":true},"netmask":{"type":"string","description":"Mask in decimal notation, e.g. 255.255.255.0","description_kind":"plain","computed":true},"network":{"type":"string","description":"Network IP address portion of the block specification","description_kind":"plain","computed":true},"public":{"type":"bool","description":"Flag indicating whether IP block is addressable from the Internet","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_organization":{"version":0,"block":{"attributes":{"created":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"logo":{"type":"string","description":"Logo URL","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the Organization","description_kind":"plain","required":true},"twitter":{"type":"string","description":"Twitter handle","description_kind":"plain","optional":true},"updated":{"type":"string","description_kind":"plain","computed":true},"website":{"type":"string","description":"Website link","description_kind":"plain","optional":true}},"block_types":{"address":{"nesting_mode":"list","block":{"attributes":{"address":{"type":"string","description":"Postal address","description_kind":"plain","required":true},"city":{"type":"string","description":"City name","description_kind":"plain","required":true},"country":{"type":"string","description":"Two letter country code (ISO 3166-1 alpha-2), e.g. US","description_kind":"plain","required":true},"state":{"type":"string","description":"State name","description_kind":"plain","optional":true},"zip_code":{"type":"string","description":"Zip Code","description_kind":"plain","required":true}},"description":"Address information block","description_kind":"plain"},"min_items":1,"max_items":1}},"description_kind":"plain"}},"equinix_metal_organization_member":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"When the invitation was created (only known in the invitation stage)","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"invited_by":{"type":"string","description":"The user id of the user that sent the invitation (only known in the invitation stage)","description_kind":"plain","computed":true},"invitee":{"type":"string","description":"The email address of the user to invite","description_kind":"plain","required":true},"message":{"type":"string","description":"A message to the invitee (only used during the invitation stage)","description_kind":"plain","optional":true},"nonce":{"type":"string","description":"The nonce for the invitation (only known in the invitation stage)","description_kind":"plain","computed":true},"organization_id":{"type":"string","description":"The organization to invite the user to","description_kind":"plain","required":true},"projects_ids":{"type":["set","string"],"description":"Project IDs the member has access to within the organization. If the member is an 'owner', the projects list should be empty.","description_kind":"plain","required":true},"roles":{"type":["set","string"],"description":"Organization roles (owner, collaborator, limited_collaborator, billing)","description_kind":"plain","required":true},"state":{"type":"string","description":"The state of the membership ('invited' when an invitation is open, 'active' when the user is an organization member)","description_kind":"plain","computed":true},"updated":{"type":"string","description":"When the invitation was updated (only known in the invitation stage)","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_port":{"version":0,"block":{"attributes":{"bond_id":{"type":"string","description":"UUID of the bond port","description_kind":"plain","computed":true},"bond_name":{"type":"string","description":"Name of the bond port","description_kind":"plain","computed":true},"bonded":{"type":"bool","description":"Flag indicating whether the port should be bonded","description_kind":"plain","required":true},"disbond_supported":{"type":"bool","description":"Flag indicating whether the port can be removed from a bond","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"layer2":{"type":"bool","description":"Flag indicating whether the port is in layer2 (or layer3) mode","description_kind":"plain","optional":true},"mac":{"type":"string","description":"MAC address of the port","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the port to look up, e.g. bond0, eth1","description_kind":"plain","computed":true},"native_vlan_id":{"type":"string","description":"UUID of native VLAN of the port","description_kind":"plain","optional":true},"network_type":{"type":"string","description":"One of layer2-bonded, layer2-individual, layer3, hybrid and hybrid-bonded. This attribute is only set on bond ports.","description_kind":"plain","computed":true},"port_id":{"type":"string","description":"UUID of the port to lookup","description_kind":"plain","required":true},"reset_on_delete":{"type":"bool","description":"Behavioral setting to reset the port to default settings. For a bond port it means layer3 without vlans attached, eth ports will be bonded without native vlan and vlans attached","description_kind":"plain","optional":true},"type":{"type":"string","description":"Port type","description_kind":"plain","computed":true},"vlan_ids":{"type":["set","string"],"description":"UUIDs VLANs to attach. To avoid jitter, use the UUID and not the VXLAN","description_kind":"plain","optional":true,"computed":true},"vxlan_ids":{"type":["set","number"],"description":"VLAN VXLAN ids to attach (example: [1000])","description_kind":"plain","optional":true,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_port_vlan_attachment":{"version":0,"block":{"attributes":{"device_id":{"type":"string","description":"ID of device to be assigned to the VLAN","description_kind":"plain","required":true},"force_bond":{"type":"bool","description":"Add port back to the bond when this resource is removed. Default is false","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"native":{"type":"bool","description":"Mark this VLAN a native VLAN on the port. This can be used only if this assignment assigns second or further VLAN to the port. To ensure that this attachment is not first on a port, you can use depends_on pointing to another equinix_metal_port_vlan_attachment, just like in the layer2-individual example above","description_kind":"plain","optional":true},"port_id":{"type":"string","description":"UUID of device port","description_kind":"plain","computed":true},"port_name":{"type":"string","description":"Name of network port to be assigned to the VLAN","description_kind":"plain","required":true},"vlan_id":{"type":"string","description":"UUID of VLAN API resource","description_kind":"plain","computed":true},"vlan_vnid":{"type":"number","description":"VXLAN Network Identifier, integer","description_kind":"plain","required":true}},"description_kind":"plain"}},"equinix_metal_project":{"version":0,"block":{"attributes":{"backend_transfer":{"type":"bool","description":"Enable or disable [Backend Transfer](https://metal.equinix.com/developers/docs/networking/backend-transfer/), default is false","description_kind":"plain","optional":true},"created":{"type":"string","description":"The timestamp for when the project was created","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the project","description_kind":"plain","required":true},"organization_id":{"type":"string","description":"The UUID of organization under which you want to create the project. If you leave it out, the project will be create under your the default organization of your account","description_kind":"plain","optional":true,"computed":true},"payment_method_id":{"type":"string","description":"The UUID of payment method for this project. The payment method and the project need to belong to the same organization (passed with organization_id, or default)","description_kind":"plain","optional":true,"computed":true},"updated":{"type":"string","description":"The timestamp for the last time the project was updated","description_kind":"plain","computed":true}},"block_types":{"bgp_config":{"nesting_mode":"list","block":{"attributes":{"asn":{"type":"number","description":"Autonomous System Number for local BGP deployment","description_kind":"plain","required":true},"deployment_type":{"type":"string","description":"\"local\" or \"global\", the local is likely to be usable immediately, the global will need to be review by Equinix Metal engineers","description_kind":"plain","required":true},"max_prefix":{"type":"number","description":"The maximum number of route filters allowed per server","description_kind":"plain","computed":true},"md5":{"type":"string","description":"Password for BGP session in plaintext (not a checksum)","description_kind":"plain","optional":true,"sensitive":true},"status":{"type":"string","description":"Status of BGP configuration in the project","description_kind":"plain","computed":true}},"description":"Optional BGP settings. Refer to [Equinix Metal guide for BGP](https://metal.equinix.com/developers/docs/networking/local-global-bgp/)","description_kind":"plain"},"max_items":1}},"description_kind":"plain"}},"equinix_metal_project_api_key":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description string for the API key","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"UUID of project which the new API key is scoped to","description_kind":"plain","required":true},"read_only":{"type":"bool","description":"Flag indicating whether the API key shoud be read-only","description_kind":"plain","required":true},"token":{"type":"string","description":"API token for API clients","description_kind":"plain","computed":true,"sensitive":true}},"description_kind":"plain"}},"equinix_metal_project_ssh_key":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The timestamp for when the SSH key was created","description_kind":"plain","computed":true},"fingerprint":{"type":"string","description":"The fingerprint of the SSH key","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the SSH key for identification","description_kind":"plain","required":true},"owner_id":{"type":"string","description":"The UUID of the Equinix Metal API User who owns this key","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The ID of parent project","description_kind":"plain","required":true},"public_key":{"type":"string","description":"The public key. If this is a file, it","description_kind":"plain","required":true},"updated":{"type":"string","description":"The timestamp for the last time the SSH key was updated","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_reserved_ip_block":{"version":0,"block":{"attributes":{"address":{"type":"string","description_kind":"plain","computed":true},"address_family":{"type":"number","description":"Address family as integer (4 or 6)","description_kind":"plain","computed":true},"cidr":{"type":"number","description":"the size of the network to reserve from an existing vrf ip_range. `cidr` can only be specified with `vrf_id`. Minimum range is 22-29, with 30-31 supported and necessary for virtual-circuits","description_kind":"plain","optional":true,"computed":true},"cidr_notation":{"type":"string","description_kind":"plain","computed":true},"custom_data":{"type":"string","description":"Custom Data is an arbitrary object (submitted in Terraform as serialized JSON) to assign to the IP Reservation. This may be helpful for self-managed IPAM. The object must be valid JSON.","description_kind":"plain","optional":true},"description":{"type":"string","description":"Arbitrary description","description_kind":"plain","optional":true},"facility":{"type":"string","description":"Facility where to allocate the public IP address block, makes sense only for type==public_ipv4, must be empty for type==global_ipv4, conflicts with metro","description_kind":"plain","optional":true},"gateway":{"type":"string","description_kind":"plain","computed":true},"global":{"type":"bool","description":"Flag indicating whether IP block is global, i.e. assignable in any location","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"manageable":{"type":"bool","description_kind":"plain","computed":true},"management":{"type":"bool","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro where to allocate the public IP address block, makes sense only for type==public_ipv4, must be empty for type==global_ipv4, conflicts with facility","description_kind":"plain","optional":true},"netmask":{"type":"string","description":"Mask in decimal notation, e.g. 255.255.255.0","description_kind":"plain","computed":true},"network":{"type":"string","description":"an unreserved network address from an existing vrf ip_range. `network` can only be specified with vrf_id","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"The metal project ID where to allocate the address block","description_kind":"plain","required":true},"public":{"type":"bool","description":"Flag indicating whether IP block is addressable from the Internet","description_kind":"plain","computed":true},"quantity":{"type":"number","description":"The number of allocated /32 addresses, a power of 2","description_kind":"plain","optional":true,"computed":true},"tags":{"type":["set","string"],"description":"Tags attached to the reserved block","description_kind":"plain","optional":true},"type":{"type":"string","description":"Either global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4.","description_kind":"plain","optional":true},"vrf_id":{"type":"string","description":"VRF ID for type=vrf reservations","description_kind":"plain","optional":true},"wait_for_state":{"type":"string","description":"Wait for the IP reservation block to reach a desired state on resource creation. One of: `pending`, `created`. The `created` state is default and recommended if the addresses are needed within the configuration. An error will be returned if a timeout or the `denied` state is encountered.","description_kind":"plain","optional":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_spot_market_request":{"version":0,"block":{"attributes":{"devices_max":{"type":"number","description":"Maximum number devices to be created","description_kind":"plain","required":true},"devices_min":{"type":"number","description":"Miniumum number devices to be created","description_kind":"plain","required":true},"facilities":{"type":["list","string"],"description":"Facility IDs where devices should be created","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"max_bid_price":{"type":"number","description":"Maximum price user is willing to pay per hour per device","description_kind":"plain","required":true},"metro":{"type":"string","description":"Metro where devices should be created","description_kind":"plain","optional":true},"project_id":{"type":"string","description":"Project ID","description_kind":"plain","required":true},"wait_for_devices":{"type":"bool","description":"On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are removed","description_kind":"plain","optional":true}},"block_types":{"instance_parameters":{"nesting_mode":"list","block":{"attributes":{"always_pxe":{"type":"bool","description_kind":"plain","optional":true},"billing_cycle":{"type":"string","description_kind":"plain","required":true},"customdata":{"type":"string","description_kind":"plain","optional":true},"description":{"type":"string","description_kind":"plain","optional":true},"features":{"type":["list","string"],"description_kind":"plain","optional":true},"hostname":{"type":"string","description_kind":"plain","required":true},"ipxe_script_url":{"type":"string","description_kind":"plain","optional":true},"locked":{"type":"bool","description_kind":"plain","optional":true},"operating_system":{"type":"string","description_kind":"plain","required":true},"plan":{"type":"string","description_kind":"plain","required":true},"project_ssh_keys":{"type":["list","string"],"description_kind":"plain","optional":true},"tags":{"type":["list","string"],"description_kind":"plain","optional":true},"termintation_time":{"type":"string","description_kind":"plain","computed":true},"user_ssh_keys":{"type":["list","string"],"description_kind":"plain","optional":true},"userdata":{"type":"string","description_kind":"plain","optional":true}},"description":"Parameters for devices provisioned from this request. You can find the parameter description from the [equinix_metal_device doc](device.md)","description_kind":"plain"},"min_items":1,"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}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_ssh_key":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The timestamp for when the SSH key was created","description_kind":"plain","computed":true},"fingerprint":{"type":"string","description":"The fingerprint of the SSH key","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the SSH key for identification","description_kind":"plain","required":true},"owner_id":{"type":"string","description":"The UUID of the Equinix Metal API User who owns this key","description_kind":"plain","computed":true},"public_key":{"type":"string","description":"The public key. If this is a file, it","description_kind":"plain","required":true},"updated":{"type":"string","description":"The timestamp for the last time the SSH key was updated","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_user_api_key":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description string for the API key","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"read_only":{"type":"bool","description":"Flag indicating whether the API key shoud be read-only","description_kind":"plain","required":true},"token":{"type":"string","description":"API token for API clients","description_kind":"plain","computed":true,"sensitive":true},"user_id":{"type":"string","description":"UUID of user owning this key","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_virtual_circuit":{"version":0,"block":{"attributes":{"connection_id":{"type":"string","description":"UUID of Connection where the VC is scoped to","description_kind":"plain","required":true},"customer_ip":{"type":"string","description":"The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet.","description_kind":"plain","optional":true},"description":{"type":"string","description":"Description of the Virtual Circuit resource","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"md5":{"type":"string","description":"The password that can be set for the VRF BGP peer","description_kind":"plain","optional":true,"sensitive":true},"metal_ip":{"type":"string","description":"The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet.","description_kind":"plain","optional":true},"name":{"type":"string","description":"Name of the Virtual Circuit resource","description_kind":"plain","optional":true},"nni_vlan":{"type":"number","description":"Equinix Metal network-to-network VLAN ID (optional when the connection has mode=tunnel)","description_kind":"plain","optional":true},"nni_vnid":{"type":"number","description":"Nni VLAN ID parameter, see https://metal.equinix.com/developers/docs/networking/fabric/","description_kind":"plain","computed":true},"peer_asn":{"type":"number","description":"The BGP ASN of the peer. The same ASN may be the used across several VCs, but it cannot be the same as the local_asn of the VRF.","description_kind":"plain","optional":true},"port_id":{"type":"string","description":"UUID of the Connection Port where the VC is scoped to","description_kind":"plain","required":true},"project_id":{"type":"string","description":"UUID of the Project where the VC is scoped to","description_kind":"plain","required":true},"speed":{"type":"string","description":"Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared.","description_kind":"plain","optional":true,"computed":true},"status":{"type":"string","description":"Status of the virtual circuit resource","description_kind":"plain","computed":true},"subnet":{"type":"string","description":"A subnet from one of the IP blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /30 or /31.\n\t\t\t\t * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip.\n\t\t\t\t * For a /30 block, it will have four IP addresses, but the first and last IP addresses are not usable. We will default to the first usable IP address for the metal_ip.","description_kind":"plain","optional":true},"tags":{"type":["list","string"],"description":"Tags attached to the virtual circuit","description_kind":"plain","optional":true},"vlan_id":{"type":"string","description":"UUID of the VLAN to associate","description_kind":"plain","optional":true},"vnid":{"type":"number","description":"VNID VLAN parameter, see https://metal.equinix.com/developers/docs/networking/fabric/","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description":"UUID of the VRF to associate","description_kind":"plain","optional":true}},"description_kind":"plain"}},"equinix_metal_vlan":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description string","description_kind":"plain","optional":true},"facility":{"type":"string","description":"Facility where to create the VLAN","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description_kind":"plain","optional":true},"project_id":{"type":"string","description":"ID of parent project","description_kind":"plain","required":true},"vxlan":{"type":"number","description":"VLAN ID, must be unique in metro","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"equinix_metal_vrf":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description of the VRF","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_ranges":{"type":["set","string"],"description":"All IPv4 and IPv6 Ranges that will be available to BGP Peers. IPv4 addresses must be /8 or smaller with a minimum size of /29. IPv6 must be /56 or smaller with a minimum size of /64. Ranges must not overlap other ranges within the VRF.","description_kind":"plain","optional":true},"local_asn":{"type":"number","description":"The 4-byte ASN set on the VRF.","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"Metro Code","description_kind":"plain","required":true},"name":{"type":"string","description":"User-supplied name of the VRF, unique to the project","description_kind":"plain","required":true},"project_id":{"type":"string","description":"Project ID","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_network_acl_template":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"ACL template description, up to 200 characters","description_kind":"plain","optional":true},"device_acl_status":{"type":"string","description":"Status of ACL template provisioning process on a device, where template was applied","description_kind":"plain","computed":true},"device_details":{"type":["list",["object",{"acl_status":"string","name":"string","uuid":"string"}]],"description":"Device Details to which ACL template is assigned to. ","description_kind":"plain","computed":true},"device_id":{"type":"string","description":"Identifier of a network device where template was applied","description_kind":"plain","deprecated":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"ACL template location metro code","description_kind":"plain","deprecated":true,"optional":true},"name":{"type":"string","description":"ACL template name","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Unique identifier of ACL template resource","description_kind":"plain","computed":true}},"block_types":{"inbound_rule":{"nesting_mode":"list","block":{"attributes":{"description":{"type":"string","description":"Inbound rule description, up to 200 characters","description_kind":"plain","optional":true},"dst_port":{"type":"string","description":"Inbound traffic destination ports. Either up to 10, comma separated ports or port range or any word","description_kind":"plain","required":true},"protocol":{"type":"string","description":"Inbound traffic protocol. One of: `IP`, `TCP`, `UDP`","description_kind":"plain","required":true},"sequence_number":{"type":"number","description":"Inbound rule sequence number","description_kind":"plain","computed":true},"source_type":{"type":"string","description":"Type of traffic source used in a given inbound rule","description_kind":"plain","deprecated":true,"computed":true},"src_port":{"type":"string","description":"Inbound traffic source ports. Either up to 10, comma separated ports or port range or any word","description_kind":"plain","required":true},"subnet":{"type":"string","description":"Inbound traffic source IP subnet in CIDR format","description_kind":"plain","optional":true},"subnets":{"type":["list","string"],"description":"Inbound traffic source IP subnets in CIDR format","description_kind":"plain","deprecated":true,"optional":true}},"description":"One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones.","description_kind":"plain"},"min_items":1}},"description":"Resource allows creation and management of Equinix Network Edge device Access Control List templates","description_kind":"plain"}},"equinix_network_bgp":{"version":0,"block":{"attributes":{"authentication_key":{"type":"string","description":"Shared key used for BGP peer authentication","description_kind":"plain","optional":true,"sensitive":true},"connection_id":{"type":"string","description":"Identifier of a connection established between network device and remote service provider that will be used for peering","description_kind":"plain","required":true},"device_id":{"type":"string","description":"Unique identifier of a network device that is a local peer in a given BGP peering configuration","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"local_asn":{"type":"number","description":"Local ASN number","description_kind":"plain","required":true},"local_ip_address":{"type":"string","description":"IP address in CIDR format of a local device","description_kind":"plain","required":true},"provisioning_status":{"type":"string","description":"BGP peering configuration provisioning status","description_kind":"plain","computed":true},"remote_asn":{"type":"number","description":"Remote ASN number","description_kind":"plain","required":true},"remote_ip_address":{"type":"string","description":"IP address of remote peer","description_kind":"plain","required":true},"state":{"type":"string","description":"BGP peer state","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"BGP peering configuration unique identifier","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Resource allows creation and management of Equinix Network Edge BGP peering configurations","description_kind":"plain"}},"equinix_network_device":{"version":0,"block":{"attributes":{"account_number":{"type":"string","description":"Device billing account number","description_kind":"plain","required":true},"acl_template_id":{"type":"string","description":"Unique identifier of applied ACL template","description_kind":"plain","optional":true},"additional_bandwidth":{"type":"number","description":"Additional Internet bandwidth, in Mbps, that will be allocated to the device","description_kind":"plain","optional":true,"computed":true},"asn":{"type":"number","description":"Autonomous system number","description_kind":"plain","computed":true},"byol":{"type":"bool","description":"Boolean value that determines device licensing mode: bring your own license or subscription (default)","description_kind":"plain","optional":true},"core_count":{"type":"number","description":"Number of CPU cores used by device","description_kind":"plain","required":true},"hostname":{"type":"string","description":"Device hostname prefix","description_kind":"plain","optional":true,"computed":true},"ibx":{"type":"string","description":"Device location Equinix Business Exchange name","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"interface":{"type":["list",["object",{"assigned_type":"string","id":"number","ip_address":"string","mac_address":"string","name":"string","operational_status":"string","status":"string","type":"string"}]],"description":"List of device interfaces","description_kind":"plain","computed":true},"interface_count":{"type":"number","description":"Number of network interfaces on a device. If not specified, default number for a given device type will be used","description_kind":"plain","optional":true,"computed":true},"license_file":{"type":"string","description":"Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode","description_kind":"plain","optional":true},"license_file_id":{"type":"string","description":"Unique identifier of applied license file","description_kind":"plain","computed":true},"license_status":{"type":"string","description":"Device license registration status","description_kind":"plain","computed":true},"license_token":{"type":"string","description":"License Token applicable for some device types in BYOL licensing mode","description_kind":"plain","optional":true},"metro_code":{"type":"string","description":"Device location metro code","description_kind":"plain","required":true},"mgmt_acl_template_uuid":{"type":"string","description":"Unique identifier of applied MGMT ACL template","description_kind":"plain","optional":true},"name":{"type":"string","description":"Device name","description_kind":"plain","required":true},"notifications":{"type":["set","string"],"description":"List of email addresses that will receive device status notifications","description_kind":"plain","required":true},"order_reference":{"type":"string","description":"Name/number used to identify device order on the invoice","description_kind":"plain","optional":true},"package_code":{"type":"string","description":"Device software package code","description_kind":"plain","required":true},"purchase_order_number":{"type":"string","description":"Purchase order number associated with a device order","description_kind":"plain","optional":true},"redundancy_type":{"type":"string","description":"Device redundancy type applicable for HA devices, either primary or secondary","description_kind":"plain","computed":true},"redundant_id":{"type":"string","description":"Unique identifier for a redundant device, applicable for HA device","description_kind":"plain","computed":true},"region":{"type":"string","description":"Device location region","description_kind":"plain","computed":true},"self_managed":{"type":"bool","description":"Boolean value that determines device management mode: self-managed or subscription (default)","description_kind":"plain","optional":true},"ssh_ip_address":{"type":"string","description":"IP address of SSH enabled interface on the device","description_kind":"plain","computed":true},"ssh_ip_fqdn":{"type":"string","description":"FQDN of SSH enabled interface on the device","description_kind":"plain","computed":true},"status":{"type":"string","description":"Device provisioning status","description_kind":"plain","computed":true},"term_length":{"type":"number","description":"Device term length","description_kind":"plain","required":true},"throughput":{"type":"number","description":"Device license throughput","description_kind":"plain","optional":true},"throughput_unit":{"type":"string","description":"Device license throughput unit (Mbps or Gbps)","description_kind":"plain","optional":true},"type_code":{"type":"string","description":"Device type code","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Device unique identifier","description_kind":"plain","computed":true},"vendor_configuration":{"type":["map","string"],"description":"Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress)","description_kind":"plain","optional":true,"computed":true},"version":{"type":"string","description":"Device software software version","description_kind":"plain","required":true},"wan_interface_id":{"type":"string","description":"device interface id picked for WAN","description_kind":"plain","optional":true},"zone_code":{"type":"string","description":"Device location zone code","description_kind":"plain","computed":true}},"block_types":{"cluster_details":{"nesting_mode":"list","block":{"attributes":{"cluster_id":{"type":"string","description":"The id of the cluster","description_kind":"plain","computed":true},"cluster_name":{"type":"string","description":"The name of the cluster device","description_kind":"plain","required":true},"num_of_nodes":{"type":"number","description":"The number of nodes in the cluster","description_kind":"plain","computed":true}},"block_types":{"node0":{"nesting_mode":"list","block":{"attributes":{"license_file_id":{"type":"string","description":"License file id. This is necessary for Fortinet and Juniper clusters","description_kind":"plain","optional":true,"sensitive":true},"license_token":{"type":"string","description":"License token. This is necessary for Palo Alto clusters","description_kind":"plain","optional":true,"sensitive":true},"name":{"type":"string","description":"The name of the node","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"The unique id of the node","description_kind":"plain","computed":true}},"block_types":{"vendor_configuration":{"nesting_mode":"list","block":{"attributes":{"activation_key":{"type":"string","description":"Activation key. This is required for Velocloud clusters","description_kind":"plain","optional":true,"sensitive":true},"admin_password":{"type":"string","description":"The administrative password of the device. You can use it to log in to the console. This field is not available for all device types","description_kind":"plain","optional":true,"computed":true,"sensitive":true},"controller1":{"type":"string","description":"System IP Address. Mandatory for the Fortinet SDWAN cluster device","description_kind":"plain","optional":true},"controller_fqdn":{"type":"string","description":"Controller fqdn. This is required for Velocloud clusters","description_kind":"plain","optional":true},"hostname":{"type":"string","description":"Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters","description_kind":"plain","optional":true},"root_password":{"type":"string","description":"The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster","description_kind":"plain","optional":true,"sensitive":true}},"description":"An object that has fields relevant to the vendor of the cluster device","description_kind":"plain"},"max_items":1}},"description":"An object that has node0 details","description_kind":"plain"},"min_items":1,"max_items":1},"node1":{"nesting_mode":"list","block":{"attributes":{"license_file_id":{"type":"string","description":"License file id. This is necessary for Fortinet and Juniper clusters","description_kind":"plain","optional":true,"sensitive":true},"license_token":{"type":"string","description":"License token. This is necessary for Palo Alto clusters","description_kind":"plain","optional":true,"sensitive":true},"name":{"type":"string","description":"The name of the node","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"The unique id of the node","description_kind":"plain","computed":true}},"block_types":{"vendor_configuration":{"nesting_mode":"list","block":{"attributes":{"activation_key":{"type":"string","description":"Activation key. This is required for Velocloud clusters","description_kind":"plain","optional":true,"sensitive":true},"admin_password":{"type":"string","description":"The administrative password of the device. You can use it to log in to the console. This field is not available for all device types","description_kind":"plain","optional":true,"computed":true,"sensitive":true},"controller1":{"type":"string","description":"System IP Address. Mandatory for the Fortinet SDWAN cluster device","description_kind":"plain","optional":true},"controller_fqdn":{"type":"string","description":"Controller fqdn. This is required for Velocloud clusters","description_kind":"plain","optional":true},"hostname":{"type":"string","description":"Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters","description_kind":"plain","optional":true},"root_password":{"type":"string","description":"The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster","description_kind":"plain","optional":true,"sensitive":true}},"description":"An object that has fields relevant to the vendor of the cluster device","description_kind":"plain"},"max_items":1}},"description":"An object that has node1 details","description_kind":"plain"},"min_items":1,"max_items":1}},"description":"An object that has the cluster details","description_kind":"plain"},"max_items":1},"secondary_device":{"nesting_mode":"list","block":{"attributes":{"account_number":{"type":"string","description":"Device billing account number","description_kind":"plain","required":true},"acl_template_id":{"type":"string","description":"Unique identifier of applied ACL template","description_kind":"plain","optional":true},"additional_bandwidth":{"type":"number","description":"Additional Internet bandwidth, in Mbps, that will be allocated to the device","description_kind":"plain","optional":true,"computed":true},"asn":{"type":"number","description":"Autonomous system number","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"Device hostname prefix","description_kind":"plain","optional":true},"ibx":{"type":"string","description":"Device location Equinix Business Exchange name","description_kind":"plain","computed":true},"interface":{"type":["list",["object",{"assigned_type":"string","id":"number","ip_address":"string","mac_address":"string","name":"string","operational_status":"string","status":"string","type":"string"}]],"description":"List of device interfaces","description_kind":"plain","computed":true},"license_file":{"type":"string","description":"Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode","description_kind":"plain","optional":true},"license_file_id":{"type":"string","description":"Unique identifier of applied license file","description_kind":"plain","computed":true},"license_status":{"type":"string","description":"Device license registration status","description_kind":"plain","computed":true},"license_token":{"type":"string","description":"License Token applicable for some device types in BYOL licensing mode","description_kind":"plain","optional":true},"metro_code":{"type":"string","description":"Device location metro code","description_kind":"plain","required":true},"mgmt_acl_template_uuid":{"type":"string","description":"Unique identifier of applied MGMT ACL template","description_kind":"plain","optional":true},"name":{"type":"string","description":"Device name","description_kind":"plain","required":true},"notifications":{"type":["set","string"],"description":"List of email addresses that will receive device status notifications","description_kind":"plain","required":true},"redundancy_type":{"type":"string","description":"Device redundancy type applicable for HA devices, either primary or secondary","description_kind":"plain","computed":true},"redundant_id":{"type":"string","description":"Unique identifier for a redundant device, applicable for HA device","description_kind":"plain","computed":true},"region":{"type":"string","description":"Device location region","description_kind":"plain","computed":true},"ssh_ip_address":{"type":"string","description":"IP address of SSH enabled interface on the device","description_kind":"plain","computed":true},"ssh_ip_fqdn":{"type":"string","description":"FQDN of SSH enabled interface on the device","description_kind":"plain","computed":true},"status":{"type":"string","description":"Device provisioning status","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Device unique identifier","description_kind":"plain","computed":true},"vendor_configuration":{"type":["map","string"],"description":"Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress)","description_kind":"plain","optional":true,"computed":true},"wan_interface_id":{"type":"string","description":"device interface id picked for WAN","description_kind":"plain","optional":true},"zone_code":{"type":"string","description":"Device location zone code","description_kind":"plain","computed":true}},"block_types":{"ssh_key":{"nesting_mode":"set","block":{"attributes":{"key_name":{"type":"string","description":"Reference by name to previously provisioned public SSH key","description_kind":"plain","required":true},"username":{"type":"string","description":"Username associated with given key","description_kind":"plain","required":true}},"description":"Definition of SSH key that will be provisioned on a device","description_kind":"plain"},"max_items":1}},"description":"Definition of secondary device applicable for HA setup","description_kind":"plain"},"max_items":1},"ssh_key":{"nesting_mode":"set","block":{"attributes":{"key_name":{"type":"string","description":"Reference by name to previously provisioned public SSH key","description_kind":"plain","required":true},"username":{"type":"string","description":"Username associated with given key","description_kind":"plain","required":true}},"description":"Definition of SSH key that will be provisioned on a device","description_kind":"plain"},"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},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Resource allows creation and management of Equinix Network Edge virtual devices","description_kind":"plain"}},"equinix_network_device_link":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"name","description_kind":"plain","required":true},"status":{"type":"string","description":"Device link provisioning status","description_kind":"plain","computed":true},"subnet":{"type":"string","description":"subnet","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Device link unique identifier","description_kind":"plain","computed":true}},"block_types":{"device":{"nesting_mode":"set","block":{"attributes":{"asn":{"type":"number","description":"Device ASN number","description_kind":"plain","optional":true},"id":{"type":"string","description":"Device identifier","description_kind":"plain","required":true},"interface_id":{"type":"number","description":"Device network interface identifier to use for device link connection","description_kind":"plain","optional":true},"ip_address":{"type":"string","description":"Assigned IP address from device link subnet","description_kind":"plain","computed":true},"status":{"type":"string","description":"Device link connection provisioning status","description_kind":"plain","computed":true}},"description_kind":"plain"},"min_items":2},"link":{"nesting_mode":"set","block":{"attributes":{"account_number":{"type":"string","description":"Billing account number to be used for connection charges","description_kind":"plain","required":true},"dst_metro_code":{"type":"string","description":"Connection destination metro code","description_kind":"plain","required":true},"dst_zone_code":{"type":"string","description":"Connection destination zone code","description_kind":"plain","deprecated":true,"optional":true},"src_metro_code":{"type":"string","description":"Connection source metro code","description_kind":"plain","required":true},"src_zone_code":{"type":"string","description":"Connection source zone code","description_kind":"plain","deprecated":true,"optional":true},"throughput":{"type":"string","description":"Connection throughput","description_kind":"plain","required":true},"throughput_unit":{"type":"string","description":"Connection throughput unit","description_kind":"plain","required":true}},"description":"link","description_kind":"plain"}},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Resource allows creation and management of Equinix Network Edge device links","description_kind":"plain"}},"equinix_network_ssh_key":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of SSH key used for identification","description_kind":"plain","required":true},"public_key":{"type":"string","description":"The SSH public key. If this is a file, it can be read using the file interpolation function","description_kind":"plain","required":true},"uuid":{"type":"string","description":"The unique identifier of the key","description_kind":"plain","computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Resource allows creation and management of Equinix Network Edge SSH keys","description_kind":"plain"}},"equinix_network_ssh_user":{"version":0,"block":{"attributes":{"device_ids":{"type":["set","string"],"description":"list of device identifiers to which user will have access","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"password":{"type":"string","description":"SSH user password","description_kind":"plain","required":true,"sensitive":true},"username":{"type":"string","description":"SSH user login name","description_kind":"plain","required":true},"uuid":{"type":"string","description":"SSH user unique identifier","description_kind":"plain","computed":true}},"description":"Resource allows creation and management of Equinix Network Edge SSH users","description_kind":"plain"}}},"data_source_schemas":{"equinix_ecx_l2_sellerprofile":{"version":0,"block":{"attributes":{"additional_info":{"type":["set",["object",{"captured_in_email":"bool","data_type":"string","description":"string","mandatory":"bool","name":"string"}]],"description":"One or more specifications of additional buyer information attributes that can be provided in connection definition that uses given seller profile","description_kind":"plain","computed":true},"description":{"type":"string","description":"Seller Profile text description","description_kind":"plain","computed":true},"encapsulation":{"type":"string","description":"Seller profile's encapsulation (either Dot1q or QinQ)","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":["set",["object",{"code":"string","ibxes":["set","string"],"name":"string","regions":["map","string"]}]],"description":"One or more specifications of metro locations supported by seller profile","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the seller profile","description_kind":"plain","optional":true,"computed":true},"organization_global_name":{"type":"string","description":"Name of seller's global organization","description_kind":"plain","optional":true,"computed":true},"organization_name":{"type":"string","description":"Name of seller's organization","description_kind":"plain","optional":true,"computed":true},"redundancy_required":{"type":"bool","description":"Boolean that indicate if seller requires connections to be redundant","description_kind":"plain","computed":true},"speed_band":{"type":["set",["object",{"speed":"number","speed_unit":"string"}]],"description":"One or more specifications of speed/bandwidth supported by given seller profile","description_kind":"plain","computed":true},"speed_customization_allowed":{"type":"bool","description":"Boolean that indicates if seller allows customer to enter a custom connection speed","description_kind":"plain","computed":true},"speed_from_api":{"type":"bool","description":"Boolean that indicates if seller is deriving connection speed from an API call","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Unique identifier of the seller profile","description_kind":"plain","computed":true}},"description":"Use this data source to get details of Equinix Fabric layer 2\tseller profile with a given name and / or organization","description_kind":"plain"}},"equinix_ecx_l2_sellerprofiles":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_codes":{"type":["set","string"],"description":"List of metro codes of locations that should be served by resulting profiles","description_kind":"plain","optional":true},"name_regex":{"type":"string","description":"A regex string to apply on returned seller profile names and filter search results","description_kind":"plain","optional":true},"organization_global_name":{"type":"string","description":"Name of seller's global organization","description_kind":"plain","optional":true},"organization_name":{"type":"string","description":"Name of seller's organization","description_kind":"plain","optional":true},"profiles":{"type":["list",["object",{"additional_info":["set",["object",{"captured_in_email":"bool","data_type":"string","description":"string","mandatory":"bool","name":"string"}]],"description":"string","encapsulation":"string","metro":["set",["object",{"code":"string","ibxes":["set","string"],"name":"string","regions":["map","string"]}]],"name":"string","organization_global_name":"string","organization_name":"string","redundancy_required":"bool","speed_band":["set",["object",{"speed":"number","speed_unit":"string"}]],"speed_customization_allowed":"bool","speed_from_api":"bool","uuid":"string"}]],"description":"Resulting list of profiles that match filtering criteria","description_kind":"plain","computed":true},"speed_bands":{"type":["set","string"],"description":"List of speed bands that should be supported by resulting profiles","description_kind":"plain","optional":true}},"description":"Use this data source to get list of Equinix Fabric layer 2 seller profiles","description_kind":"plain"}},"equinix_ecx_port":{"version":0,"block":{"attributes":{"bandwidth":{"type":"string","description":"Port Bandwidth in bytes","description_kind":"plain","computed":true},"buyout":{"type":"bool","description":"Boolean value that indicates whether the port supports unlimited connections.","description_kind":"plain","computed":true},"encapsulation":{"type":"string","description":"The VLAN encapsulation of the port (Dot1q or QinQ)","description_kind":"plain","computed":true},"ibx":{"type":"string","description":"Port location Equinix Business Exchange (IBX)","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Port location metro code","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the port","description_kind":"plain","required":true},"priority":{"type":"string","description":"The priority of the device (primary / secondary) where the port resides","description_kind":"plain","computed":true},"region":{"type":"string","description":"Port location region","description_kind":"plain","computed":true},"status":{"type":"string","description":"Port status that indicates whether a port has been assigned or is ready for connection","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Unique identifier of the por","description_kind":"plain","computed":true}},"description":"Use this data source to get details of Equinix Fabric port with a given name","description_kind":"plain"}},"equinix_metal_connection":{"version":0,"block":{"attributes":{"connection_id":{"type":"string","description":"ID of the connection to lookup","description_kind":"plain","required":true},"description":{"type":"string","description":"Description of the connection resource","description_kind":"plain","computed":true},"facility":{"type":"string","description":"Facility which the connection is scoped to","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"Metro which the connection is scoped to","description_kind":"plain","computed":true},"mode":{"type":"string","description":"Connection mode - standard or tunnel","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the connection resource","description_kind":"plain","computed":true},"organization_id":{"type":"string","description":"ID of organization to which the connection is scoped to","description_kind":"plain","computed":true},"ports":{"type":["list",["object",{"id":"string","link_status":"string","name":"string","role":"string","speed":"number","status":"string","virtual_circuit_ids":["list","string"]}]],"description":"List of connection ports - primary (`ports[0]`) and secondary (`ports[1]`)","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of project to which the connection belongs","description_kind":"plain","computed":true},"redundancy":{"type":"string","description":"Connection redundancy - redundant or primary","description_kind":"plain","computed":true},"service_token_type":{"type":"string","description":"Only used with shared connection. Type of service token to use for the connection, a_side or z_side.","description_kind":"plain","computed":true},"service_tokens":{"type":["list",["object",{"expires_at":"string","id":"string","max_allowed_speed":"string","role":"string","state":"string","type":"string"}]],"description":"Only used with shared connection. List of service tokens required to continue the setup process with [equinix_ecx_l2_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard)","description_kind":"plain","computed":true},"speed":{"type":"string","description":"Port speed. Possible values are 50Mbps, 200Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps, 10Gbps","description_kind":"plain","computed":true},"status":{"type":"string","description":"Status of the connection resource","description_kind":"plain","computed":true},"tags":{"type":["list","string"],"description":"Tags attached to the connection","description_kind":"plain","computed":true},"token":{"type":"string","description":"Only used with shared connection. Fabric Token required to continue the setup process with [equinix_ecx_l2_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard)","description_kind":"plain","deprecated":true,"computed":true},"type":{"type":"string","description":"Connection type - dedicated or shared","description_kind":"plain","computed":true},"vlans":{"type":["list","number"],"description":"Attached vlans, only in shared connection.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_device":{"version":0,"block":{"attributes":{"access_private_ipv4":{"type":"string","description":"The ipv4 private IP assigned to the device","description_kind":"plain","computed":true},"access_public_ipv4":{"type":"string","description":"The ipv4 management IP assigned to the device","description_kind":"plain","computed":true},"access_public_ipv6":{"type":"string","description":"The ipv6 management IP assigned to the device","description_kind":"plain","computed":true},"always_pxe":{"type":"bool","description_kind":"plain","computed":true},"billing_cycle":{"type":"string","description":"The billing cycle of the device (monthly or hourly)","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description string for the device","description_kind":"plain","computed":true},"device_id":{"type":"string","description":"Device ID","description_kind":"plain","optional":true,"computed":true},"facility":{"type":"string","description":"The facility where the device is deployed","description_kind":"plain","computed":true},"hardware_reservation_id":{"type":"string","description":"The id of hardware reservation which this device occupies","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"The device name","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipxe_script_url":{"type":"string","description_kind":"plain","computed":true},"metro":{"type":"string","description":"The metro where the device is deployed","description_kind":"plain","computed":true},"network":{"type":["list",["object",{"address":"string","cidr":"number","family":"number","gateway":"string","public":"bool"}]],"description":"The device's private and public IP (v4 and v6) network details. When a device is run without any special network configuration, it will have 3 networks: ublic IPv4 at equinix_metal_device.name.network.0, IPv6 at equinix_metal_device.name.network.1 and private IPv4 at equinix_metal_device.name.network.2. Elastic addresses then stack by type - an assigned public IPv4 will go after the management public IPv4 (to index 1), and will then shift the indices of the IPv6 and private IPv4. Assigned private IPv4 will go after the management private IPv4 (to the end of the network list).","description_kind":"plain","computed":true},"network_type":{"type":"string","description":"L2 network type of the device, one oflayer3, hybrid, layer2-individual, layer2-bonded","description_kind":"plain","computed":true},"operating_system":{"type":"string","description":"The operating system running on the device","description_kind":"plain","computed":true},"plan":{"type":"string","description":"The hardware config of the device","description_kind":"plain","computed":true},"ports":{"type":["list",["object",{"bonded":"bool","id":"string","mac":"string","name":"string","type":"string"}]],"description":"Ports assigned to the device","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The id of the project in which the devices exists","description_kind":"plain","optional":true,"computed":true},"root_password":{"type":"string","description":"Root password to the server (if still available)","description_kind":"plain","computed":true,"sensitive":true},"ssh_key_ids":{"type":["list","string"],"description":"List of IDs of SSH keys deployed in the device, can be both user or project SSH keys","description_kind":"plain","computed":true},"state":{"type":"string","description":"The state of the device","description_kind":"plain","computed":true},"storage":{"type":"string","description_kind":"plain","computed":true},"tags":{"type":["list","string"],"description":"Tags attached to the device","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_device_bgp_neighbors":{"version":0,"block":{"attributes":{"bgp_neighbors":{"type":["list",["object",{"address_family":"number","customer_as":"number","customer_ip":"string","md5_enabled":"bool","md5_password":"string","multihop":"bool","peer_as":"number","peer_ips":["list","string"],"routes_in":["list",["object",{"exact":"bool","route":"string"}]],"routes_out":["list",["object",{"exact":"bool","route":"string"}]]}]],"description":"Array of BGP neighbor records","description_kind":"plain","computed":true},"device_id":{"type":"string","description":"UUID of BGP-enabled device whose neighbors to list","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"equinix_metal_facility":{"version":0,"block":{"attributes":{"code":{"type":"string","description":"The code of the Facility to match","description_kind":"plain","required":true},"features":{"type":["list","string"],"description":"The features of this Facility.","description_kind":"plain","computed":true},"features_required":{"type":["set","string"],"description":"Features which the facility needs to have.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"This facility's metro code.","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of this Facility.","description_kind":"plain","computed":true}},"block_types":{"capacity":{"nesting_mode":"list","block":{"attributes":{"plan":{"type":"string","description":"Plan which has to be available in selected location","description_kind":"plain","required":true},"quantity":{"type":"number","description_kind":"plain","optional":true}},"description":"Optional capacity specification","description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_gateway":{"version":0,"block":{"attributes":{"gateway_id":{"type":"string","description":"UUID of the Metal Gateway to fetch","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_reservation_id":{"type":"string","description":"UUID of the IP Reservation to associate, must be in the same metro as the VLAN","description_kind":"plain","computed":true},"private_ipv4_subnet_size":{"type":"number","description":"Size of the private IPv4 subnet to create for this gateway, one of [8 16 32 64 128]","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"UUID of the Project where the Gateway is scoped to","description_kind":"plain","computed":true},"state":{"type":"string","description":"Status of the virtual circuit resource","description_kind":"plain","computed":true},"vlan_id":{"type":"string","description":"UUID of the VLAN to associate","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description":"UUID of the VRF associated with the IP Reservation","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_hardware_reservation":{"version":0,"block":{"attributes":{"device_id":{"type":"string","description":"UUID of device occupying the reservation","description_kind":"plain","optional":true,"computed":true},"facility":{"type":"string","description":"Plan type for the reservation","description_kind":"plain","computed":true},"id":{"type":"string","description":"ID of the hardware reservation to look up","description_kind":"plain","optional":true,"computed":true},"plan":{"type":"string","description":"Plan type for the reservation","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"UUID of project this reservation is scoped to","description_kind":"plain","computed":true},"provisionable":{"type":"bool","description":"Flag indicating whether the reserved server is provisionable or not. Spare devices can't be provisioned unless they are activated first","description_kind":"plain","computed":true},"short_id":{"type":"string","description":"Reservation short ID","description_kind":"plain","computed":true},"spare":{"type":"bool","description":"Flag indicating whether the Hardware Reservation is a spare. Spare Hardware Reservations are used when a Hardware Reservations requires service from Metal Equinix","description_kind":"plain","computed":true},"switch_uuid":{"type":"string","description":"Switch short ID, can be used to determine if two devices are connected to the same switch","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_ip_block_ranges":{"version":0,"block":{"attributes":{"facility":{"type":"string","description":"Facility code filtering the IP blocks. Global IPv4 blcoks will be listed anyway. If you omit this and metro, all the block from the project will be listed","description_kind":"plain","optional":true},"global_ipv4":{"type":["list","string"],"description":"List of CIDR expressions for Global IPv4 blocks in the project","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ipv6":{"type":["list","string"],"description":"List of CIDR expressions for IPv6 blocks in the project","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro code filtering the IP blocks. Global IPv4 blcoks will be listed anyway. If you omit this and facility, all the block from the project will be listed","description_kind":"plain","optional":true},"private_ipv4":{"type":["list","string"],"description":"List of CIDR expressions for Private IPv4 blocks in the project","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of the project from which to list the blocks","description_kind":"plain","required":true},"public_ipv4":{"type":["list","string"],"description":"List of CIDR expressions for Public IPv4 blocks in the project","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_metro":{"version":0,"block":{"attributes":{"code":{"type":"string","description":"The code of the Metro to match","description_kind":"plain","required":true},"country":{"type":"string","description":"The country of this Metro.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The ID of this Metro.","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of this Metro.","description_kind":"plain","computed":true}},"block_types":{"capacity":{"nesting_mode":"list","block":{"attributes":{"plan":{"type":"string","description":"Plan which has to be available in selected location","description_kind":"plain","required":true},"quantity":{"type":"number","description_kind":"plain","optional":true}},"description":"Optional capacity specification","description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_operating_system":{"version":0,"block":{"attributes":{"distro":{"type":"string","description":"Name of the OS distribution","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name or part of the name of the distribution. Case insensitive","description_kind":"plain","optional":true},"provisionable_on":{"type":"string","description":"Plan name","description_kind":"plain","optional":true},"slug":{"type":"string","description":"Operating system slug (same as id)","description_kind":"plain","computed":true},"version":{"type":"string","description":"Version of the distribution","description_kind":"plain","optional":true}},"description_kind":"plain"}},"equinix_metal_organization":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"logo":{"type":"string","description":"Logo URL","description_kind":"plain","computed":true},"name":{"type":"string","description":"The organization name","description_kind":"plain","optional":true,"computed":true},"organization_id":{"type":"string","description":"The UUID of the organization resource","description_kind":"plain","optional":true,"computed":true},"project_ids":{"type":["list","string"],"description":"UUIDs of project resources which belong to this organization","description_kind":"plain","computed":true},"twitter":{"type":"string","description":"Twitter handle","description_kind":"plain","computed":true},"website":{"type":"string","description":"Website link","description_kind":"plain","computed":true}},"block_types":{"address":{"nesting_mode":"list","block":{"attributes":{"address":{"type":"string","description_kind":"plain","optional":true,"computed":true},"city":{"type":"string","description_kind":"plain","optional":true,"computed":true},"country":{"type":"string","description":"Two letter country code (ISO 3166-1 alpha-2), e.g. US","description_kind":"plain","optional":true,"computed":true},"state":{"type":"string","description_kind":"plain","optional":true,"computed":true},"zip_code":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description":"Business' address","description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_plans":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"plans":{"type":["list",["object",{"available_in":["set","string"],"available_in_metros":["set","string"],"class":"string","deployment_types":["set","string"],"description":"string","id":"string","legacy":"bool","line":"string","name":"string","pricing_hour":"number","pricing_month":"number","slug":"string"}]],"description":"Sorted list of available server plans that match the specified filters","description_kind":"plain","computed":true}},"block_types":{"filter":{"nesting_mode":"set","block":{"attributes":{"all":{"type":"bool","description":"If is set to true, the values are joined with an AND, and the requests returns only the results that match all specified values","description_kind":"plain","optional":true},"attribute":{"type":"string","description":"The attribute used to filter. Filter attributes are case-sensitive","description_kind":"plain","required":true},"match_by":{"type":"string","description":"The type of comparison to apply. One of: in (default), re, substring, less_than, less_than_or_equal, greater_than, greater_than_or_equal","description_kind":"plain","optional":true},"values":{"type":["list","string"],"description":"The filter values. Filter values are case-sensitive. If you specify multiple values for a filter, the values are joined with an OR by default, and the request returns all results that match any of the specified values","description_kind":"plain","required":true}},"description":"One or more attribute/values pairs on which to filter results","description_kind":"plain"}},"sort":{"nesting_mode":"list","block":{"attributes":{"attribute":{"type":"string","description":"The attribute used to sort the results. Sort attributes are case-sensitive","description_kind":"plain","required":true},"direction":{"type":"string","description":"Sort results in ascending or descending order. Strings are sorted in alphabetical order. One of: asc, desc","description_kind":"plain","optional":true}},"description":"One or more attribute/direction pairs on which to sort results. If multiple sorts are provided, they will be applied in order","description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_port":{"version":0,"block":{"attributes":{"bond_id":{"type":"string","description":"UUID of the bond port","description_kind":"plain","computed":true},"bond_name":{"type":"string","description":"Name of the bond port","description_kind":"plain","computed":true},"bonded":{"type":"bool","description":"Flag indicating whether the port is bonded","description_kind":"plain","computed":true},"device_id":{"type":"string","description":"Device UUID where to lookup the port","description_kind":"plain","optional":true},"disbond_supported":{"type":"bool","description":"Flag indicating whether the port can be removed from a bond","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"layer2":{"type":"bool","description":"Flag indicating whether the port is in layer2 (or layer3) mode","description_kind":"plain","computed":true},"mac":{"type":"string","description":"MAC address of the port","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the port to look up, e.g. bond0, eth1","description_kind":"plain","optional":true,"computed":true},"native_vlan_id":{"type":"string","description":"UUID of native VLAN of the port","description_kind":"plain","computed":true},"network_type":{"type":"string","description":"One of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded","description_kind":"plain","computed":true},"port_id":{"type":"string","description":"UUID of the port to lookup","description_kind":"plain","optional":true},"type":{"type":"string","description":"Port type","description_kind":"plain","computed":true},"vlan_ids":{"type":["list","string"],"description":"UUIDs of attached VLANs","description_kind":"plain","computed":true},"vxlan_ids":{"type":["list","number"],"description":"UUIDs of attached VLANs","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_precreated_ip_block":{"version":0,"block":{"attributes":{"address":{"type":"string","description_kind":"plain","computed":true},"address_family":{"type":"number","description":"4 or 6, depending on which block you are looking for.","description_kind":"plain","required":true},"cidr":{"type":"number","description":"Length of CIDR prefix of the block as integer","description_kind":"plain","computed":true},"cidr_notation":{"type":"string","description":"CIDR notation of the looked up block.","description_kind":"plain","computed":true},"facility":{"type":"string","description":"Facility of the searched block. (for non-global blocks).","description_kind":"plain","optional":true},"gateway":{"type":"string","description_kind":"plain","computed":true},"global":{"type":"bool","description":"Whether to look for global block. Default is false for backward compatibility.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"manageable":{"type":"bool","description_kind":"plain","computed":true},"management":{"type":"bool","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro of the searched block (for non-global blocks).","description_kind":"plain","optional":true},"netmask":{"type":"string","description":"Mask in decimal notation, e.g. 255.255.255.0","description_kind":"plain","computed":true},"network":{"type":"string","description":"Network IP address portion of the block specification","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of the project where the searched block should be.","description_kind":"plain","required":true},"public":{"type":"bool","description":"Whether to look for public or private block.","description_kind":"plain","required":true},"quantity":{"type":"number","description_kind":"plain","computed":true},"type":{"type":"string","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_project":{"version":0,"block":{"attributes":{"backend_transfer":{"type":"bool","description":"Whether Backend Transfer is enabled for this project","description_kind":"plain","computed":true},"bgp_config":{"type":["list",["object",{"asn":"number","deployment_type":"string","max_prefix":"number","md5":"string","status":"string"}]],"description":"Optional BGP settings. Refer to [Equinix Metal guide for BGP](https://metal.equinix.com/developers/docs/networking/local-global-bgp/)","description_kind":"plain","computed":true},"created":{"type":"string","description":"The timestamp for when the project was created","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name which is used to look up the project","description_kind":"plain","optional":true,"computed":true},"organization_id":{"type":"string","description":"The UUID of this project's parent organization","description_kind":"plain","computed":true},"payment_method_id":{"type":"string","description":"The UUID of payment method for this project","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The UUID by which to look up the project","description_kind":"plain","optional":true,"computed":true},"updated":{"type":"string","description":"The timestamp for the last time the project was updated","description_kind":"plain","computed":true},"user_ids":{"type":["list","string"],"description":"List of UUIDs of user accounts which belong to this project","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_project_ssh_key":{"version":0,"block":{"attributes":{"created":{"type":"string","description_kind":"plain","computed":true},"fingerprint":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description":"The id of the SSH Key","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The label of the Equinix Metal SSH Key","description_kind":"plain","computed":true},"owner_id":{"type":"string","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The Equinix Metal project id of the Equinix Metal SSH Key","description_kind":"plain","required":true},"public_key":{"type":"string","description":"The public SSH key that will be authorized for SSH access on Equinix Metal devices provisioned with this key","description_kind":"plain","computed":true},"search":{"type":"string","description":"The name, fingerprint, id, or public_key of the SSH Key to search for in the Equinix Metal project","description_kind":"plain","optional":true},"updated":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_reserved_ip_block":{"version":0,"block":{"attributes":{"address":{"type":"string","description_kind":"plain","computed":true},"address_family":{"type":"number","description":"4 or 6","description_kind":"plain","computed":true},"cidr":{"type":"number","description":"Length of CIDR prefix of the block as integer","description_kind":"plain","computed":true},"cidr_notation":{"type":"string","description":"CIDR notation of the looked up block","description_kind":"plain","computed":true},"facility":{"type":"string","description":"Facility of the block. (for non-global blocks)","description_kind":"plain","computed":true},"gateway":{"type":"string","description":"IP address of gateway for the block","description_kind":"plain","computed":true},"global":{"type":"bool","description":"Addresses from block are attachable in all locations","description_kind":"plain","computed":true},"id":{"type":"string","description":"ID of the block to look up","description_kind":"plain","optional":true,"computed":true},"ip_address":{"type":"string","description":"Find block containing this IP address in given project","description_kind":"plain","optional":true},"manageable":{"type":"bool","description_kind":"plain","computed":true},"management":{"type":"bool","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro of the block (for non-global blocks)","description_kind":"plain","computed":true},"netmask":{"type":"string","description":"Mask in decimal notation, e.g. 255.255.255.0","description_kind":"plain","computed":true},"network":{"type":"string","description":"Network IP address portion of the block specification","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of the project where the searched block should be","description_kind":"plain","optional":true,"computed":true},"public":{"type":"bool","description":"Addresses from public block are routeable from the Internet","description_kind":"plain","computed":true},"quantity":{"type":"number","description_kind":"plain","computed":true},"type":{"type":"string","description":"Address type, one of public_ipv4, public_ipv6, private_ipv4, global_ipv4, and vrf","description_kind":"plain","computed":true},"vrf_id":{"type":"number","description":"VRF ID of the block when type=vrf","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_spot_market_price":{"version":0,"block":{"attributes":{"facility":{"type":"string","description":"Name of the facility","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"Name of the metro","description_kind":"plain","optional":true},"plan":{"type":"string","description":"Name of the plan","description_kind":"plain","required":true},"price":{"type":"number","description":"Current spot market price for given plan in given facility","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_spot_market_request":{"version":0,"block":{"attributes":{"device_ids":{"type":["list","string"],"description":"List of IDs of devices spawned by the referenced Spot Market Request","description_kind":"plain","computed":true},"devices_max":{"type":"number","description":"Maximum number devices to be created","description_kind":"plain","computed":true},"devices_min":{"type":"number","description":"Miniumum number devices to be created","description_kind":"plain","computed":true},"end_at":{"type":"string","description":"Date and time When the spot market request will be ended.","description_kind":"plain","computed":true},"facilities":{"type":["list","string"],"description":"Facility IDs where devices should be created","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"max_bid_price":{"type":"number","description":"Maximum price user is willing to pay per hour per device","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro where devices should be created.","description_kind":"plain","computed":true},"plan":{"type":"string","description":"The device plan slug.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"Project ID","description_kind":"plain","computed":true},"request_id":{"type":"string","description":"The id of the Spot Market Request","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"default":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"equinix_metal_virtual_circuit":{"version":0,"block":{"attributes":{"connection_id":{"type":"string","description":"UUID of Connection where the VC is scoped to","description_kind":"plain","computed":true},"customer_ip":{"type":"string","description":"The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet.","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description of the virtual circuit","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"md5":{"type":"string","description":"The password that can be set for the VRF BGP peer","description_kind":"plain","computed":true,"sensitive":true},"metal_ip":{"type":"string","description":"The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet.","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the virtual circuit","description_kind":"plain","computed":true},"nni_vlan":{"type":"number","description":"Nni VLAN parameter, see https://metal.equinix.com/developers/docs/networking/fabric/","description_kind":"plain","computed":true},"nni_vnid":{"type":"number","description":"Nni VLAN ID parameter, see https://metal.equinix.com/developers/docs/networking/fabric/","description_kind":"plain","computed":true},"peer_asn":{"type":"number","description":"The BGP ASN of the peer. The same ASN may be the used across several VCs, but it cannot be the same as the local_asn of the VRF.","description_kind":"plain","computed":true},"port_id":{"type":"string","description":"UUID of the Connection Port where the VC is scoped to","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"ID of the projct to which the virtual circuit belongs","description_kind":"plain","computed":true},"speed":{"type":"string","description":"Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared.","description_kind":"plain","computed":true},"status":{"type":"string","description":"Status of the virtual circuit","description_kind":"plain","computed":true},"subnet":{"type":"string","description":"A subnet from one of the IP blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /30 or /31.\n\t\t\t\t * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip.\n\t\t\t\t * For a /30 block, it will have four IP addresses, but the first and last IP addresses are not usable. We will default to the first usable IP address for the metal_ip.","description_kind":"plain","computed":true},"tags":{"type":["list","string"],"description":"Tags attached to the virtual circuit","description_kind":"plain","computed":true},"virtual_circuit_id":{"type":"string","description":"ID of the virtual circuit to lookup","description_kind":"plain","required":true},"vlan_id":{"type":"string","description":"UUID of the associated VLAN","description_kind":"plain","computed":true},"vnid":{"type":"number","description":"VNID VLAN parameter, see https://metal.equinix.com/developers/docs/networking/fabric/","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description":"UUID of the associated VRF","description_kind":"plain","computed":true}},"description_kind":"plain"}},"equinix_metal_vlan":{"version":0,"block":{"attributes":{"assigned_devices_ids":{"type":["list","string"],"description":"List of device IDs to which this VLAN is assigned","description_kind":"plain","computed":true},"description":{"type":"string","description":"VLAN description text","description_kind":"plain","computed":true},"facility":{"type":"string","description":"Facility where the VLAN is deployed","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro":{"type":"string","description":"Metro where the VLAN is deployed","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"ID of parent project of the VLAN. Use together with vxlan and metro or facility","description_kind":"plain","optional":true,"computed":true},"vlan_id":{"type":"string","description":"Metal UUID of the VLAN resource","description_kind":"plain","optional":true,"computed":true},"vxlan":{"type":"number","description":"VXLAN numner of the VLAN. Unique in a project and facility or metro. Use with project_id","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"equinix_metal_vrf":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description of the VRF","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_ranges":{"type":["set","string"],"description":"All IPv4 and IPv6 Ranges that will be available to BGP Peers. IPv4 addresses must be /8 or smaller with a minimum size of /29. IPv6 must be /56 or smaller with a minimum size of /64. Ranges must not overlap other ranges within the VRF.","description_kind":"plain","computed":true},"local_asn":{"type":"number","description":"The 4-byte ASN set on the VRF.","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro Code","description_kind":"plain","computed":true},"name":{"type":"string","description":"User-supplied name of the VRF, unique to the project","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"Project ID","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description":"ID of the VRF to lookup","description_kind":"plain","required":true}},"description_kind":"plain"}},"equinix_network_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Account location metro cod","description_kind":"plain","required":true},"name":{"type":"string","description":"Account name for filtering","description_kind":"plain","optional":true,"computed":true},"number":{"type":"string","description":"Account unique number","description_kind":"plain","computed":true},"status":{"type":"string","description":"Account status for filtering. Possible values are Active, Processing, Submitted, Staged","description_kind":"plain","optional":true,"computed":true},"ucm_id":{"type":"string","description":"Account unique identifier","description_kind":"plain","computed":true}},"description":"Use this data source to get number and identifier of Equinix Network Edge billing account in a given metro location","description_kind":"plain"}},"equinix_network_device":{"version":0,"block":{"attributes":{"account_number":{"type":"string","description":"Device billing account number","description_kind":"plain","computed":true},"acl_template_id":{"type":"string","description":"Unique identifier of applied ACL template","description_kind":"plain","computed":true},"additional_bandwidth":{"type":"number","description":"Additional Internet bandwidth, in Mbps, that will be allocated to the device","description_kind":"plain","computed":true},"asn":{"type":"number","description":"Autonomous system number","description_kind":"plain","computed":true},"byol":{"type":"bool","description":"Boolean value that determines device licensing mode: bring your own license or subscription (default)","description_kind":"plain","computed":true},"cluster_details":{"type":["list",["object",{"cluster_id":"string","cluster_name":"string","node0":["list",["object",{"license_file_id":"string","license_token":"string","name":"string","uuid":"string","vendor_configuration":["list",["object",{"activation_key":"string","admin_password":"string","controller1":"string","controller_fqdn":"string","hostname":"string","root_password":"string"}]]}]],"node1":["list",["object",{"license_file_id":"string","license_token":"string","name":"string","uuid":"string","vendor_configuration":["list",["object",{"activation_key":"string","admin_password":"string","controller1":"string","controller_fqdn":"string","hostname":"string","root_password":"string"}]]}]],"num_of_nodes":"number"}]],"description":"An object that has the cluster details","description_kind":"plain","computed":true},"core_count":{"type":"number","description":"Number of CPU cores used by device","description_kind":"plain","computed":true},"hostname":{"type":"string","description":"Device hostname prefix","description_kind":"plain","computed":true},"ibx":{"type":"string","description":"Device location Equinix Business Exchange name","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"interface":{"type":["list",["object",{"assigned_type":"string","id":"number","ip_address":"string","mac_address":"string","name":"string","operational_status":"string","status":"string","type":"string"}]],"description":"List of device interfaces","description_kind":"plain","computed":true},"interface_count":{"type":"number","description":"Number of network interfaces on a device. If not specified, default number for a given device type will be used","description_kind":"plain","computed":true},"license_file":{"type":"string","description":"Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode","description_kind":"plain","computed":true},"license_file_id":{"type":"string","description":"Unique identifier of applied license file","description_kind":"plain","computed":true},"license_status":{"type":"string","description":"Device license registration status","description_kind":"plain","computed":true},"license_token":{"type":"string","description":"License Token applicable for some device types in BYOL licensing mode","description_kind":"plain","computed":true},"metro_code":{"type":"string","description":"Device location metro code","description_kind":"plain","computed":true},"mgmt_acl_template_uuid":{"type":"string","description":"Unique identifier of applied MGMT ACL template","description_kind":"plain","computed":true},"name":{"type":"string","description":"Device name","description_kind":"plain","optional":true,"computed":true},"notifications":{"type":["set","string"],"description":"List of email addresses that will receive device status notifications","description_kind":"plain","computed":true},"order_reference":{"type":"string","description":"Name/number used to identify device order on the invoice","description_kind":"plain","computed":true},"package_code":{"type":"string","description":"Device software package code","description_kind":"plain","computed":true},"purchase_order_number":{"type":"string","description":"Purchase order number associated with a device order","description_kind":"plain","computed":true},"redundancy_type":{"type":"string","description":"Device redundancy type applicable for HA devices, either primary or secondary","description_kind":"plain","computed":true},"redundant_id":{"type":"string","description":"Unique identifier for a redundant device, applicable for HA device","description_kind":"plain","computed":true},"region":{"type":"string","description":"Device location region","description_kind":"plain","computed":true},"secondary_device":{"type":["list",["object",{"account_number":"string","acl_template_id":"string","additional_bandwidth":"number","asn":"number","hostname":"string","ibx":"string","interface":["list",["object",{"assigned_type":"string","id":"number","ip_address":"string","mac_address":"string","name":"string","operational_status":"string","status":"string","type":"string"}]],"license_file":"string","license_file_id":"string","license_status":"string","license_token":"string","metro_code":"string","mgmt_acl_template_uuid":"string","name":"string","notifications":["set","string"],"redundancy_type":"string","redundant_id":"string","region":"string","ssh_ip_address":"string","ssh_ip_fqdn":"string","ssh_key":["set",["object",{"key_name":"string","username":"string"}]],"status":"string","uuid":"string","vendor_configuration":["map","string"],"wan_interface_id":"string","zone_code":"string"}]],"description":"Definition of secondary device applicable for HA setup","description_kind":"plain","computed":true},"self_managed":{"type":"bool","description":"Boolean value that determines device management mode: self-managed or subscription (default)","description_kind":"plain","computed":true},"ssh_ip_address":{"type":"string","description":"IP address of SSH enabled interface on the device","description_kind":"plain","computed":true},"ssh_ip_fqdn":{"type":"string","description":"FQDN of SSH enabled interface on the device","description_kind":"plain","computed":true},"ssh_key":{"type":["set",["object",{"key_name":"string","username":"string"}]],"description":"Definition of SSH key that will be provisioned on a device","description_kind":"plain","computed":true},"status":{"type":"string","description":"Device provisioning status","description_kind":"plain","computed":true},"term_length":{"type":"number","description":"Device term length","description_kind":"plain","computed":true},"throughput":{"type":"number","description":"Device license throughput","description_kind":"plain","computed":true},"throughput_unit":{"type":"string","description":"Device license throughput unit (Mbps or Gbps)","description_kind":"plain","computed":true},"type_code":{"type":"string","description":"Device type code","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Device unique identifier","description_kind":"plain","optional":true,"computed":true},"valid_status_list":{"type":"string","description":"Comma Separated List of states to be considered valid when searching by name","description_kind":"plain","optional":true},"vendor_configuration":{"type":["map","string"],"description":"Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress)","description_kind":"plain","computed":true},"version":{"type":"string","description":"Device software software version","description_kind":"plain","computed":true},"wan_interface_id":{"type":"string","description":"device interface id picked for WAN","description_kind":"plain","computed":true},"zone_code":{"type":"string","description":"Device location zone code","description_kind":"plain","computed":true}},"description":"Use this data source to get details of Equinix Network Edge network device with a given Name or UUID","description_kind":"plain"}},"equinix_network_device_platform":{"version":0,"block":{"attributes":{"core_count":{"type":"number","description":"Number of CPU cores used to limit platform search results","description_kind":"plain","optional":true,"computed":true},"device_type":{"type":"string","description":"Device type code","description_kind":"plain","required":true},"flavor":{"type":"string","description":"Device platform flavor that determines number of CPU cores and memory. Supported values: small, medium, large, xlarge","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"license_options":{"type":["set","string"],"description":"List of device licensing options to limit platform search result. Supported values: BYOL (Bring Your Own License), Sub (license subscription)","description_kind":"plain","optional":true,"computed":true},"management_types":{"type":["set","string"],"description":"List of device management types to limit platform search results. Supported values: EQUINIX-CONFIGURED, SELF-CONFIGURED","description_kind":"plain","optional":true,"computed":true},"memory":{"type":"number","description":"The amount of memory provided by device platform","description_kind":"plain","computed":true},"memory_unit":{"type":"string","description":"Unit of memory provider by device platform","description_kind":"plain","computed":true},"packages":{"type":["set","string"],"description":"List of software package codes to limit platform search results","description_kind":"plain","optional":true,"computed":true}},"description":"Use this data source to get Equinix Network Edge device platform configuration details for a given device type","description_kind":"plain"}},"equinix_network_device_software":{"version":0,"block":{"attributes":{"date":{"type":"string","description":"Version release date","description_kind":"plain","computed":true},"device_type":{"type":"string","description":"Code of a device type","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"image_name":{"type":"string","description":"Software image name","description_kind":"plain","computed":true},"most_recent":{"type":"bool","description":"Boolean value to indicate that most recent version should be used, in case when more than one result is returned","description_kind":"plain","optional":true},"packages":{"type":["set","string"],"description":"Limits returned versions to those that are supported by given software package codes","description_kind":"plain","optional":true,"computed":true},"release_notes_link":{"type":"string","description":"Link to version release notes","description_kind":"plain","computed":true},"stable":{"type":"bool","description":"Boolean value to limit query results to stable versions only","description_kind":"plain","optional":true,"computed":true},"status":{"type":"string","description":"Version status","description_kind":"plain","computed":true},"version":{"type":"string","description":"Software version","description_kind":"plain","computed":true},"version_regex":{"type":"string","description":"A regex string to apply on returned versions and filter search results","description_kind":"plain","optional":true}},"description":"Use this data source to get Equinix Network Edge device software details for a given device type.","description_kind":"plain"}},"equinix_network_device_type":{"version":0,"block":{"attributes":{"category":{"type":"string","description":"Device type category, one of: Router, Firewall, SDWAN","description_kind":"plain","optional":true,"computed":true},"code":{"type":"string","description":"Device type short code, unique identifier of a network device type","description_kind":"plain","computed":true},"description":{"type":"string","description":"Device type textual description","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_codes":{"type":["set","string"],"description":"List of metro codes where device type has to be available","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Device type name","description_kind":"plain","optional":true,"computed":true},"vendor":{"type":"string","description":"Device type vendor i.e. Cisco, Juniper Networks, VERSA Networks","description_kind":"plain","optional":true,"computed":true}},"description":"Use this data source to get Equinix Network Edge device type details","description_kind":"plain"}}}}}} diff --git a/internal/controller/metal/organizationmember/zz_controller.go b/internal/controller/metal/organizationmember/zz_controller.go new file mode 100755 index 0000000..a554ad0 --- /dev/null +++ b/internal/controller/metal/organizationmember/zz_controller.go @@ -0,0 +1,60 @@ +/* +Copyright 2021 The Crossplane Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by terrajet. DO NOT EDIT. + +package organizationmember + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + tjcontroller "github.com/crossplane/terrajet/pkg/controller" + "github.com/crossplane/terrajet/pkg/terraform" + ctrl "sigs.k8s.io/controller-runtime" + + v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" +) + +// Setup adds a controller that reconciles OrganizationMember managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1alpha1.OrganizationMember_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)) + } + r := managed.NewReconciler(mgr, + xpresource.ManagedKind(v1alpha1.OrganizationMember_GroupVersionKind), + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_organization_member"])), + 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...), + ) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + For(&v1alpha1.OrganizationMember{}). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/zz_setup.go b/internal/controller/zz_setup.go index 332bb11..7e52270 100755 --- a/internal/controller/zz_setup.go +++ b/internal/controller/zz_setup.go @@ -31,6 +31,7 @@ import ( gateway "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/metal/gateway" ipattachment "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/metal/ipattachment" organization "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/metal/organization" + organizationmember "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/metal/organizationmember" port "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/metal/port" portvlanattachment "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/metal/portvlanattachment" project "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/metal/project" @@ -66,6 +67,7 @@ func Setup(mgr ctrl.Manager, o controller.Options) error { gateway.Setup, ipattachment.Setup, organization.Setup, + organizationmember.Setup, port.Setup, portvlanattachment.Setup, project.Setup, diff --git a/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml b/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml new file mode 100644 index 0000000..2ccbba1 --- /dev/null +++ b/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml @@ -0,0 +1,255 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.8.0 + creationTimestamp: null + name: organizationmembers.metal.equinix.jet.crossplane.io +spec: + group: metal.equinix.jet.crossplane.io + names: + categories: + - crossplane + - managed + - equinixjet + kind: OrganizationMember + listKind: OrganizationMemberList + plural: organizationmembers + singular: organizationmember + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: OrganizationMember is the Schema for the OrganizationMembers + API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: OrganizationMemberSpec defines the desired state of OrganizationMember + 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. + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + invitee: + description: The email address of the user to invite + type: string + message: + description: A message to the invitee (only used during the invitation + stage) + type: string + organizationId: + description: The organization to invite the user to + type: string + projectsIds: + description: Project IDs the member has access to within the organization. + If the member is an 'owner', the projects list should be empty. + items: + type: string + type: array + roles: + description: Organization roles (owner, collaborator, limited_collaborator, + billing) + items: + type: string + type: array + required: + - invitee + - organizationId + - projectsIds + - roles + type: object + 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 + required: + - name + type: object + providerRef: + description: 'ProviderReference specifies the provider that will be + used to create, observe, update, and delete this managed resource. + Deprecated: Please use ProviderConfigReference, i.e. `providerConfigRef`' + properties: + name: + description: Name of the referenced object. + type: string + 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 + 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: OrganizationMemberStatus defines the observed state of OrganizationMember. + properties: + atProvider: + properties: + created: + type: string + id: + type: string + invitedBy: + type: string + nonce: + type: string + state: + type: string + updated: + type: string + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time this condition + transitioned from one status to another. + format: date-time + type: string + message: + description: A Message containing details about this condition's + last transition from one status to another, if any. + type: string + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: Type of this condition. At most one of each condition + type may apply to a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] From f2d312809d4d66dd38e98c7ad92facf5351853a2 Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 1 Oct 2022 23:09:54 -0400 Subject: [PATCH 3/6] add referencers for project_id in several Metal types Signed-off-by: Marques Johansson --- config/metal/devicenetworktype/config.go | 30 +++++++++++++++++++++ config/metal/portvlanattachment/config.go | 33 +++++++++++++++++++++++ config/metal/projectapikey/config.go | 30 +++++++++++++++++++++ config/metal/projectsshkey/config.go | 30 +++++++++++++++++++++ config/metal/reservedipblock/config.go | 30 +++++++++++++++++++++ 5 files changed, 153 insertions(+) create mode 100644 config/metal/devicenetworktype/config.go create mode 100644 config/metal/portvlanattachment/config.go create mode 100644 config/metal/projectapikey/config.go create mode 100644 config/metal/projectsshkey/config.go create mode 100644 config/metal/reservedipblock/config.go diff --git a/config/metal/devicenetworktype/config.go b/config/metal/devicenetworktype/config.go new file mode 100644 index 0000000..01b42ac --- /dev/null +++ b/config/metal/devicenetworktype/config.go @@ -0,0 +1,30 @@ +/* +Copyright 2021 The Crossplane Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package devicenetworktype + +import ( + "github.com/crossplane/terrajet/pkg/config" +) + +// Configure the devicenetworktype group with references to other resources +func Configure(p *config.Provider) { + p.AddResourceConfigurator("equinix_metal_device_network_type", func(r *config.Resource) { + r.References["device_id"] = config.Reference{ + Type: "Device", + } + }) +} diff --git a/config/metal/portvlanattachment/config.go b/config/metal/portvlanattachment/config.go new file mode 100644 index 0000000..f936405 --- /dev/null +++ b/config/metal/portvlanattachment/config.go @@ -0,0 +1,33 @@ +/* +Copyright 2021 The Crossplane Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package portvlanattachment + +import ( + "github.com/crossplane/terrajet/pkg/config" +) + +// Configure the portvlanattachment group with references to other resources +func Configure(p *config.Provider) { + p.AddResourceConfigurator("equinix_metal_port_vlan_attachment", func(r *config.Resource) { + r.References["device_id"] = config.Reference{ + Type: "Device", + } + r.References["vlan_vnid"] = config.Reference{ + Type: "Vlan", + } + }) +} diff --git a/config/metal/projectapikey/config.go b/config/metal/projectapikey/config.go new file mode 100644 index 0000000..90f3bc6 --- /dev/null +++ b/config/metal/projectapikey/config.go @@ -0,0 +1,30 @@ +/* +Copyright 2021 The Crossplane Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package projectapikey + +import ( + "github.com/crossplane/terrajet/pkg/config" +) + +// Configure the projectapikey group with references to other resources +func Configure(p *config.Provider) { + p.AddResourceConfigurator("equinix_metal_project_api_key", func(r *config.Resource) { + r.References["project_id"] = config.Reference{ + Type: "Project", + } + }) +} diff --git a/config/metal/projectsshkey/config.go b/config/metal/projectsshkey/config.go new file mode 100644 index 0000000..508a360 --- /dev/null +++ b/config/metal/projectsshkey/config.go @@ -0,0 +1,30 @@ +/* +Copyright 2021 The Crossplane Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package projectsshkey + +import ( + "github.com/crossplane/terrajet/pkg/config" +) + +// Configure the projectsshkey group with references to other resources +func Configure(p *config.Provider) { + p.AddResourceConfigurator("equinix_metal_project_ssh_key", func(r *config.Resource) { + r.References["project_id"] = config.Reference{ + Type: "Project", + } + }) +} diff --git a/config/metal/reservedipblock/config.go b/config/metal/reservedipblock/config.go new file mode 100644 index 0000000..35f1275 --- /dev/null +++ b/config/metal/reservedipblock/config.go @@ -0,0 +1,30 @@ +/* +Copyright 2021 The Crossplane Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package reservedipblock + +import ( + "github.com/crossplane/terrajet/pkg/config" +) + +// Configure the reservedipblock group with references to other resources +func Configure(p *config.Provider) { + p.AddResourceConfigurator("equinix_metal_reserved_ip_block", func(r *config.Resource) { + r.References["project_id"] = config.Reference{ + Type: "Project", + } + }) +} From 36fdc39e4a26db27551633bb588879f5f515698a Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 1 Oct 2022 23:29:03 -0400 Subject: [PATCH 4/6] define common referencers once for metal Signed-off-by: Marques Johansson --- config/metal/connection/config.go | 32 --------- config/metal/device/config.go | 4 -- config/metal/devicenetworktype/config.go | 30 -------- config/metal/portvlanattachment/config.go | 33 --------- config/metal/project/config.go | 28 -------- config/metal/projectapikey/config.go | 30 -------- config/metal/projectsshkey/config.go | 30 -------- config/metal/reservedipblock/config.go | 30 -------- config/overrides.go | 83 +++++++++++++++++++++++ config/provider.go | 23 +++---- 10 files changed, 93 insertions(+), 230 deletions(-) delete mode 100644 config/metal/connection/config.go delete mode 100644 config/metal/devicenetworktype/config.go delete mode 100644 config/metal/portvlanattachment/config.go delete mode 100644 config/metal/project/config.go delete mode 100644 config/metal/projectapikey/config.go delete mode 100644 config/metal/projectsshkey/config.go delete mode 100644 config/metal/reservedipblock/config.go create mode 100644 config/overrides.go diff --git a/config/metal/connection/config.go b/config/metal/connection/config.go deleted file mode 100644 index 01388ac..0000000 --- a/config/metal/connection/config.go +++ /dev/null @@ -1,32 +0,0 @@ -/* -Copyright 2021 The Crossplane Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package connection - -import "github.com/crossplane/terrajet/pkg/config" - -// Configure the connection group with references to other resources -func Configure(p *config.Provider) { - p.AddResourceConfigurator("equinix_metal_connection", func(r *config.Resource) { - r.References["organization_id"] = config.Reference{ - Type: "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1.Organization", - } - - r.References["project_id"] = config.Reference{ - Type: "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1.Project", - } - }) -} diff --git a/config/metal/device/config.go b/config/metal/device/config.go index 438faf5..2261223 100644 --- a/config/metal/device/config.go +++ b/config/metal/device/config.go @@ -23,10 +23,6 @@ import ( // Configure the device group with references to other resources func Configure(p *config.Provider) { p.AddResourceConfigurator("equinix_metal_device", func(r *config.Resource) { - r.References["project_id"] = config.Reference{ - Type: "Project", - } - r.LateInitializer = config.LateInitializer{ // NOTE(displague): These are ignored because they conflict with each other. // See the following for more details: https://github.com/crossplane/terrajet/issues/107 diff --git a/config/metal/devicenetworktype/config.go b/config/metal/devicenetworktype/config.go deleted file mode 100644 index 01b42ac..0000000 --- a/config/metal/devicenetworktype/config.go +++ /dev/null @@ -1,30 +0,0 @@ -/* -Copyright 2021 The Crossplane Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package devicenetworktype - -import ( - "github.com/crossplane/terrajet/pkg/config" -) - -// Configure the devicenetworktype group with references to other resources -func Configure(p *config.Provider) { - p.AddResourceConfigurator("equinix_metal_device_network_type", func(r *config.Resource) { - r.References["device_id"] = config.Reference{ - Type: "Device", - } - }) -} diff --git a/config/metal/portvlanattachment/config.go b/config/metal/portvlanattachment/config.go deleted file mode 100644 index f936405..0000000 --- a/config/metal/portvlanattachment/config.go +++ /dev/null @@ -1,33 +0,0 @@ -/* -Copyright 2021 The Crossplane Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package portvlanattachment - -import ( - "github.com/crossplane/terrajet/pkg/config" -) - -// Configure the portvlanattachment group with references to other resources -func Configure(p *config.Provider) { - p.AddResourceConfigurator("equinix_metal_port_vlan_attachment", func(r *config.Resource) { - r.References["device_id"] = config.Reference{ - Type: "Device", - } - r.References["vlan_vnid"] = config.Reference{ - Type: "Vlan", - } - }) -} diff --git a/config/metal/project/config.go b/config/metal/project/config.go deleted file mode 100644 index 6b712e2..0000000 --- a/config/metal/project/config.go +++ /dev/null @@ -1,28 +0,0 @@ -/* -Copyright 2021 The Crossplane Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package project - -import "github.com/crossplane/terrajet/pkg/config" - -// Configure the device group with references to other resources -func Configure(p *config.Provider) { - p.AddResourceConfigurator("equinix_metal_project", func(r *config.Resource) { - r.References["organization_id"] = config.Reference{ - Type: "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1.Organization", - } - }) -} diff --git a/config/metal/projectapikey/config.go b/config/metal/projectapikey/config.go deleted file mode 100644 index 90f3bc6..0000000 --- a/config/metal/projectapikey/config.go +++ /dev/null @@ -1,30 +0,0 @@ -/* -Copyright 2021 The Crossplane Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package projectapikey - -import ( - "github.com/crossplane/terrajet/pkg/config" -) - -// Configure the projectapikey group with references to other resources -func Configure(p *config.Provider) { - p.AddResourceConfigurator("equinix_metal_project_api_key", func(r *config.Resource) { - r.References["project_id"] = config.Reference{ - Type: "Project", - } - }) -} diff --git a/config/metal/projectsshkey/config.go b/config/metal/projectsshkey/config.go deleted file mode 100644 index 508a360..0000000 --- a/config/metal/projectsshkey/config.go +++ /dev/null @@ -1,30 +0,0 @@ -/* -Copyright 2021 The Crossplane Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package projectsshkey - -import ( - "github.com/crossplane/terrajet/pkg/config" -) - -// Configure the projectsshkey group with references to other resources -func Configure(p *config.Provider) { - p.AddResourceConfigurator("equinix_metal_project_ssh_key", func(r *config.Resource) { - r.References["project_id"] = config.Reference{ - Type: "Project", - } - }) -} diff --git a/config/metal/reservedipblock/config.go b/config/metal/reservedipblock/config.go deleted file mode 100644 index 35f1275..0000000 --- a/config/metal/reservedipblock/config.go +++ /dev/null @@ -1,30 +0,0 @@ -/* -Copyright 2021 The Crossplane Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package reservedipblock - -import ( - "github.com/crossplane/terrajet/pkg/config" -) - -// Configure the reservedipblock group with references to other resources -func Configure(p *config.Provider) { - p.AddResourceConfigurator("equinix_metal_reserved_ip_block", func(r *config.Resource) { - r.References["project_id"] = config.Reference{ - Type: "Project", - } - }) -} diff --git a/config/overrides.go b/config/overrides.go new file mode 100644 index 0000000..ff78a0c --- /dev/null +++ b/config/overrides.go @@ -0,0 +1,83 @@ +/* +Copyright 2022 The Crossplane Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + // Note(turkenh): we are importing this to embed provider schema document + _ "embed" + "strings" + + tjconfig "github.com/crossplane/terrajet/pkg/config" +) + +// IdentifierAssignedByEquinix will work for all Equinix types because even if +// the ID is assigned by user, we'll see it in the TF State ID. The +// resource-specific configurations should override this whenever possible. +func IdentifierAssignedByEquinix() tjconfig.ResourceOption { + return func(r *tjconfig.Resource) { + r.ExternalName = tjconfig.IdentifierFromProvider + } +} + +// KnownReferencers adds referencers for fields that are known and common among +// more than a few resources. +func KnownReferencers() tjconfig.ResourceOption { //nolint:gocyclo + return func(r *tjconfig.Resource) { + for k, s := range r.TerraformResource.Schema { + // We shouldn't add referencers for status fields and sensitive fields + // since they already have secret referencer. + if (s.Computed && !s.Optional) || s.Sensitive { + continue + } + if r.ShortGroup != "metal" { + continue + } + switch { + case strings.HasSuffix(k, "project_id"): + r.References[k] = tjconfig.Reference{ + // github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1.Project + Type: "Project", + } + case strings.HasSuffix(k, "organization_id"): + r.References[k] = tjconfig.Reference{ + Type: "Organization", + } + case strings.HasSuffix(k, "connection_id"): + r.References[k] = tjconfig.Reference{ + Type: "Connection", + } + case strings.HasSuffix(k, "device_id"): + r.References[k] = tjconfig.Reference{ + Type: "Device", + } + case strings.HasSuffix(k, "vlan_id"): + // vlan_vnid is ignored because it is an int type + r.References[k] = tjconfig.Reference{ + Type: "Vlan", + } + case strings.HasSuffix(k, "vrf_id"): + r.References[k] = tjconfig.Reference{ + Type: "Vrf", + } + case strings.HasSuffix(k, "ip_reservation_id"): + r.References[k] = tjconfig.Reference{ + Type: "ReservedIPBlock", + } + } + } + } +} diff --git a/config/provider.go b/config/provider.go index 6398756..d8d5aa8 100644 --- a/config/provider.go +++ b/config/provider.go @@ -21,11 +21,8 @@ import ( _ "embed" "github.com/crossplane-contrib/provider-jet-equinix/config/ecx/l2connection" - "github.com/crossplane-contrib/provider-jet-equinix/config/metal/connection" "github.com/crossplane-contrib/provider-jet-equinix/config/metal/device" - "github.com/crossplane-contrib/provider-jet-equinix/config/metal/project" tjconfig "github.com/crossplane/terrajet/pkg/config" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -38,15 +35,11 @@ var providerSchema string // GetProvider returns provider configuration func GetProvider() *tjconfig.Provider { - defaultResourceFn := func(name string, terraformResource *schema.Resource, opts ...tjconfig.ResourceOption) *tjconfig.Resource { - r := tjconfig.DefaultResource(name, terraformResource) - // Add any provider-specific defaulting here. For example: - r.ExternalName = tjconfig.IdentifierFromProvider - return r - } - pc := tjconfig.NewProviderWithSchema([]byte(providerSchema), resourcePrefix, modulePath, - tjconfig.WithDefaultResourceFn(defaultResourceFn), + tjconfig.WithDefaultResourceFn(DefaultResource( + KnownReferencers(), + IdentifierAssignedByEquinix(), + )), tjconfig.WithIncludeList([]string{ ".*", }), @@ -54,9 +47,7 @@ func GetProvider() *tjconfig.Provider { for _, configure := range []func(provider *tjconfig.Provider){ // add custom config functions - connection.Configure, device.Configure, - project.Configure, l2connection.Configure, } { configure(pc) @@ -65,3 +56,9 @@ func GetProvider() *tjconfig.Provider { pc.ConfigureResources() return pc } + +// DefaultResource returns a DefaultResourceFn that makes sure the original +// DefaultResource call is made with given options here. +func DefaultResource(opts ...tjconfig.ResourceOption) tjconfig.DefaultResourceFn { + return tjconfig.DefaultResource +} From 736dc3812be542c42d79db5806efff245b828790 Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 1 Oct 2022 23:44:48 -0400 Subject: [PATCH 5/6] regenerate with common referencers Signed-off-by: Marques Johansson --- apis/metal/v1alpha1/zz_bgpsession_types.go | 11 +- apis/metal/v1alpha1/zz_connection_types.go | 4 +- .../v1alpha1/zz_devicenetworktype_types.go | 11 +- apis/metal/v1alpha1/zz_gateway_types.go | 29 +- apis/metal/v1alpha1/zz_generated.deepcopy.go | 200 ++++++++ apis/metal/v1alpha1/zz_generated.resolvers.go | 460 ++++++++++++++++++ apis/metal/v1alpha1/zz_ipattachment_types.go | 11 +- .../v1alpha1/zz_organizationmember_types.go | 11 +- apis/metal/v1alpha1/zz_port_types.go | 7 + .../v1alpha1/zz_portvlanattachment_types.go | 11 +- apis/metal/v1alpha1/zz_project_types.go | 2 +- apis/metal/v1alpha1/zz_projectapikey_types.go | 11 +- apis/metal/v1alpha1/zz_projectsshkey_types.go | 11 +- .../v1alpha1/zz_reservedipblock_types.go | 18 +- .../v1alpha1/zz_spotmarketrequest_types.go | 11 +- .../metal/v1alpha1/zz_virtualcircuit_types.go | 36 +- apis/metal/v1alpha1/zz_vlan_types.go | 11 +- apis/metal/v1alpha1/zz_vrf_types.go | 11 +- config/overrides.go | 65 ++- config/provider.go | 8 +- ...equinix.jet.crossplane.io_bgpsessions.yaml | 24 +- ....jet.crossplane.io_devicenetworktypes.yaml | 24 +- ...al.equinix.jet.crossplane.io_gateways.yaml | 72 ++- ...uinix.jet.crossplane.io_ipattachments.yaml | 24 +- ...jet.crossplane.io_organizationmembers.yaml | 24 +- ...metal.equinix.jet.crossplane.io_ports.yaml | 23 + ...jet.crossplane.io_portvlanattachments.yaml | 24 +- ...inix.jet.crossplane.io_projectapikeys.yaml | 24 +- ...inix.jet.crossplane.io_projectsshkeys.yaml | 24 +- ...ix.jet.crossplane.io_reservedipblocks.yaml | 48 +- ....jet.crossplane.io_spotmarketrequests.yaml | 24 +- ...nix.jet.crossplane.io_virtualcircuits.yaml | 94 +++- ...metal.equinix.jet.crossplane.io_vlans.yaml | 25 +- ...metal.equinix.jet.crossplane.io_vrves.yaml | 24 +- 34 files changed, 1331 insertions(+), 86 deletions(-) diff --git a/apis/metal/v1alpha1/zz_bgpsession_types.go b/apis/metal/v1alpha1/zz_bgpsession_types.go index 679ad35..6595b66 100755 --- a/apis/metal/v1alpha1/zz_bgpsession_types.go +++ b/apis/metal/v1alpha1/zz_bgpsession_types.go @@ -42,8 +42,15 @@ type BGPSessionParameters struct { DefaultRoute *bool `json:"defaultRoute,omitempty" tf:"default_route,omitempty"` // ID of device - // +kubebuilder:validation:Required - DeviceID *string `json:"deviceId" tf:"device_id,omitempty"` + // +crossplane:generate:reference:type=Device + // +kubebuilder:validation:Optional + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + DeviceIDSelector *v1.Selector `json:"deviceIdSelector,omitempty" tf:"-"` } // BGPSessionSpec defines the desired state of BGPSession diff --git a/apis/metal/v1alpha1/zz_connection_types.go b/apis/metal/v1alpha1/zz_connection_types.go index 5bcbc90..5dde5b3 100755 --- a/apis/metal/v1alpha1/zz_connection_types.go +++ b/apis/metal/v1alpha1/zz_connection_types.go @@ -60,7 +60,7 @@ type ConnectionParameters struct { Name *string `json:"name" tf:"name,omitempty"` // ID of the organization responsible for the connection. Applicable with type "dedicated" - // +crossplane:generate:reference:type=github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1.Organization + // +crossplane:generate:reference:type=Organization // +kubebuilder:validation:Optional OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` @@ -71,7 +71,7 @@ type ConnectionParameters struct { OrganizationIDSelector *v1.Selector `json:"organizationIdSelector,omitempty" tf:"-"` // ID of the project where the connection is scoped to. Required with type "shared" - // +crossplane:generate:reference:type=github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1.Project + // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` diff --git a/apis/metal/v1alpha1/zz_devicenetworktype_types.go b/apis/metal/v1alpha1/zz_devicenetworktype_types.go index fe88ef8..a14d7a7 100755 --- a/apis/metal/v1alpha1/zz_devicenetworktype_types.go +++ b/apis/metal/v1alpha1/zz_devicenetworktype_types.go @@ -32,8 +32,15 @@ type DeviceNetworkTypeObservation struct { type DeviceNetworkTypeParameters struct { // The ID of the device on which the network type should be set - // +kubebuilder:validation:Required - DeviceID *string `json:"deviceId" tf:"device_id,omitempty"` + // +crossplane:generate:reference:type=Device + // +kubebuilder:validation:Optional + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + DeviceIDSelector *v1.Selector `json:"deviceIdSelector,omitempty" tf:"-"` // Network type to set. Must be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded // +kubebuilder:validation:Required diff --git a/apis/metal/v1alpha1/zz_gateway_types.go b/apis/metal/v1alpha1/zz_gateway_types.go index 7136cd7..6670e6d 100755 --- a/apis/metal/v1alpha1/zz_gateway_types.go +++ b/apis/metal/v1alpha1/zz_gateway_types.go @@ -36,20 +36,41 @@ type GatewayObservation struct { type GatewayParameters struct { // UUID of the Public or VRF IP Reservation to associate, must be in the same metro as the VLAN + // +crossplane:generate:reference:type=ReservedIPBlock // +kubebuilder:validation:Optional IPReservationID *string `json:"ipReservationId,omitempty" tf:"ip_reservation_id,omitempty"` + // +kubebuilder:validation:Optional + IPReservationIDRef *v1.Reference `json:"ipReservationIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + IPReservationIDSelector *v1.Selector `json:"ipReservationIdSelector,omitempty" tf:"-"` + // Size of the private IPv4 subnet to create for this gateway, one of [8 16 32 64 128] // +kubebuilder:validation:Optional PrivateIPv4SubnetSize *float64 `json:"privateIpv4SubnetSize,omitempty" tf:"private_ipv4_subnet_size,omitempty"` // UUID of the Project where the Gateway is scoped to - // +kubebuilder:validation:Required - ProjectID *string `json:"projectId" tf:"project_id,omitempty"` + // +crossplane:generate:reference:type=Project + // +kubebuilder:validation:Optional + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` // UUID of the VLAN to associate - // +kubebuilder:validation:Required - VlanID *string `json:"vlanId" tf:"vlan_id,omitempty"` + // +crossplane:generate:reference:type=Vlan + // +kubebuilder:validation:Optional + VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` + + // +kubebuilder:validation:Optional + VlanIDRef *v1.Reference `json:"vlanIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + VlanIDSelector *v1.Selector `json:"vlanIdSelector,omitempty" tf:"-"` } // GatewaySpec defines the desired state of Gateway diff --git a/apis/metal/v1alpha1/zz_generated.deepcopy.go b/apis/metal/v1alpha1/zz_generated.deepcopy.go index ae97f7e..8ff1183 100644 --- a/apis/metal/v1alpha1/zz_generated.deepcopy.go +++ b/apis/metal/v1alpha1/zz_generated.deepcopy.go @@ -238,6 +238,16 @@ func (in *BGPSessionParameters) DeepCopyInto(out *BGPSessionParameters) { *out = new(string) **out = **in } + if in.DeviceIDRef != nil { + in, out := &in.DeviceIDRef, &out.DeviceIDRef + *out = new(v1.Reference) + **out = **in + } + if in.DeviceIDSelector != nil { + in, out := &in.DeviceIDSelector, &out.DeviceIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPSessionParameters. @@ -679,6 +689,16 @@ func (in *DeviceNetworkTypeParameters) DeepCopyInto(out *DeviceNetworkTypeParame *out = new(string) **out = **in } + if in.DeviceIDRef != nil { + in, out := &in.DeviceIDRef, &out.DeviceIDRef + *out = new(v1.Reference) + **out = **in + } + if in.DeviceIDSelector != nil { + in, out := &in.DeviceIDSelector, &out.DeviceIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.Type != nil { in, out := &in.Type, &out.Type *out = new(string) @@ -1174,6 +1194,16 @@ func (in *GatewayParameters) DeepCopyInto(out *GatewayParameters) { *out = new(string) **out = **in } + if in.IPReservationIDRef != nil { + in, out := &in.IPReservationIDRef, &out.IPReservationIDRef + *out = new(v1.Reference) + **out = **in + } + if in.IPReservationIDSelector != nil { + in, out := &in.IPReservationIDSelector, &out.IPReservationIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.PrivateIPv4SubnetSize != nil { in, out := &in.PrivateIPv4SubnetSize, &out.PrivateIPv4SubnetSize *out = new(float64) @@ -1184,11 +1214,31 @@ func (in *GatewayParameters) DeepCopyInto(out *GatewayParameters) { *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + **out = **in + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.VlanID != nil { in, out := &in.VlanID, &out.VlanID *out = new(string) **out = **in } + if in.VlanIDRef != nil { + in, out := &in.VlanIDRef, &out.VlanIDRef + *out = new(v1.Reference) + **out = **in + } + if in.VlanIDSelector != nil { + in, out := &in.VlanIDSelector, &out.VlanIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayParameters. @@ -1433,6 +1483,16 @@ func (in *IPAttachmentParameters) DeepCopyInto(out *IPAttachmentParameters) { *out = new(string) **out = **in } + if in.DeviceIDRef != nil { + in, out := &in.DeviceIDRef, &out.DeviceIDRef + *out = new(v1.Reference) + **out = **in + } + if in.DeviceIDSelector != nil { + in, out := &in.DeviceIDSelector, &out.DeviceIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPAttachmentParameters. @@ -1844,6 +1904,16 @@ func (in *OrganizationMemberParameters) DeepCopyInto(out *OrganizationMemberPara *out = new(string) **out = **in } + if in.OrganizationIDRef != nil { + in, out := &in.OrganizationIDRef, &out.OrganizationIDRef + *out = new(v1.Reference) + **out = **in + } + if in.OrganizationIDSelector != nil { + in, out := &in.OrganizationIDSelector, &out.OrganizationIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.ProjectsIds != nil { in, out := &in.ProjectsIds, &out.ProjectsIds *out = make([]*string, len(*in)) @@ -2155,6 +2225,16 @@ func (in *PortParameters) DeepCopyInto(out *PortParameters) { *out = new(string) **out = **in } + if in.NativeVlanIDRef != nil { + in, out := &in.NativeVlanIDRef, &out.NativeVlanIDRef + *out = new(v1.Reference) + **out = **in + } + if in.NativeVlanIDSelector != nil { + in, out := &in.NativeVlanIDSelector, &out.NativeVlanIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.PortID != nil { in, out := &in.PortID, &out.PortID *out = new(string) @@ -2330,6 +2410,16 @@ func (in *PortVlanAttachmentParameters) DeepCopyInto(out *PortVlanAttachmentPara *out = new(string) **out = **in } + if in.DeviceIDRef != nil { + in, out := &in.DeviceIDRef, &out.DeviceIDRef + *out = new(v1.Reference) + **out = **in + } + if in.DeviceIDSelector != nil { + in, out := &in.DeviceIDSelector, &out.DeviceIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.ForceBond != nil { in, out := &in.ForceBond, &out.ForceBond *out = new(bool) @@ -2586,6 +2676,16 @@ func (in *ProjectAPIKeyParameters) DeepCopyInto(out *ProjectAPIKeyParameters) { *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + **out = **in + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.ReadOnly != nil { in, out := &in.ReadOnly, &out.ReadOnly *out = new(bool) @@ -2870,6 +2970,16 @@ func (in *ProjectSSHKeyParameters) DeepCopyInto(out *ProjectSSHKeyParameters) { *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + **out = **in + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.PublicKey != nil { in, out := &in.PublicKey, &out.PublicKey *out = new(string) @@ -3162,6 +3272,16 @@ func (in *ReservedIPBlockParameters) DeepCopyInto(out *ReservedIPBlockParameters *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + **out = **in + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.Quantity != nil { in, out := &in.Quantity, &out.Quantity *out = new(float64) @@ -3188,6 +3308,16 @@ func (in *ReservedIPBlockParameters) DeepCopyInto(out *ReservedIPBlockParameters *out = new(string) **out = **in } + if in.VrfIDRef != nil { + in, out := &in.VrfIDRef, &out.VrfIDRef + *out = new(v1.Reference) + **out = **in + } + if in.VrfIDSelector != nil { + in, out := &in.VrfIDSelector, &out.VrfIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.WaitForState != nil { in, out := &in.WaitForState, &out.WaitForState *out = new(string) @@ -3589,6 +3719,16 @@ func (in *SpotMarketRequestParameters) DeepCopyInto(out *SpotMarketRequestParame *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + **out = **in + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.WaitForDevices != nil { in, out := &in.WaitForDevices, &out.WaitForDevices *out = new(bool) @@ -3885,6 +4025,16 @@ func (in *VirtualCircuitParameters) DeepCopyInto(out *VirtualCircuitParameters) *out = new(string) **out = **in } + if in.ConnectionIDRef != nil { + in, out := &in.ConnectionIDRef, &out.ConnectionIDRef + *out = new(v1.Reference) + **out = **in + } + if in.ConnectionIDSelector != nil { + in, out := &in.ConnectionIDSelector, &out.ConnectionIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.CustomerIP != nil { in, out := &in.CustomerIP, &out.CustomerIP *out = new(string) @@ -3930,6 +4080,16 @@ func (in *VirtualCircuitParameters) DeepCopyInto(out *VirtualCircuitParameters) *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + **out = **in + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.Speed != nil { in, out := &in.Speed, &out.Speed *out = new(string) @@ -3956,11 +4116,31 @@ func (in *VirtualCircuitParameters) DeepCopyInto(out *VirtualCircuitParameters) *out = new(string) **out = **in } + if in.VlanIDRef != nil { + in, out := &in.VlanIDRef, &out.VlanIDRef + *out = new(v1.Reference) + **out = **in + } + if in.VlanIDSelector != nil { + in, out := &in.VlanIDSelector, &out.VlanIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.VrfID != nil { in, out := &in.VrfID, &out.VrfID *out = new(string) **out = **in } + if in.VrfIDRef != nil { + in, out := &in.VrfIDRef, &out.VrfIDRef + *out = new(v1.Reference) + **out = **in + } + if in.VrfIDSelector != nil { + in, out := &in.VrfIDSelector, &out.VrfIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualCircuitParameters. @@ -4109,6 +4289,16 @@ func (in *VlanParameters) DeepCopyInto(out *VlanParameters) { *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + **out = **in + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.Vxlan != nil { in, out := &in.Vxlan, &out.Vxlan *out = new(float64) @@ -4278,6 +4468,16 @@ func (in *VrfParameters) DeepCopyInto(out *VrfParameters) { *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + **out = **in + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VrfParameters. diff --git a/apis/metal/v1alpha1/zz_generated.resolvers.go b/apis/metal/v1alpha1/zz_generated.resolvers.go index 5b8d9ce..a7eb5b5 100644 --- a/apis/metal/v1alpha1/zz_generated.resolvers.go +++ b/apis/metal/v1alpha1/zz_generated.resolvers.go @@ -24,6 +24,32 @@ import ( client "sigs.k8s.io/controller-runtime/pkg/client" ) +// ResolveReferences of this BGPSession. +func (mg *BGPSession) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.DeviceID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.DeviceIDRef, + Selector: mg.Spec.ForProvider.DeviceIDSelector, + To: reference.To{ + List: &DeviceList{}, + Managed: &Device{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.DeviceID") + } + mg.Spec.ForProvider.DeviceID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.DeviceIDRef = rsp.ResolvedReference + + return nil +} + // ResolveReferences of this Connection. func (mg *Connection) ResolveReferences(ctx context.Context, c client.Reader) error { r := reference.NewAPIResolver(c, mg) @@ -92,6 +118,194 @@ func (mg *Device) ResolveReferences(ctx context.Context, c client.Reader) error return nil } +// ResolveReferences of this DeviceNetworkType. +func (mg *DeviceNetworkType) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.DeviceID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.DeviceIDRef, + Selector: mg.Spec.ForProvider.DeviceIDSelector, + To: reference.To{ + List: &DeviceList{}, + Managed: &Device{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.DeviceID") + } + mg.Spec.ForProvider.DeviceID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.DeviceIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this Gateway. +func (mg *Gateway) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.IPReservationID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.IPReservationIDRef, + Selector: mg.Spec.ForProvider.IPReservationIDSelector, + To: reference.To{ + List: &ReservedIPBlockList{}, + Managed: &ReservedIPBlock{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.IPReservationID") + } + mg.Spec.ForProvider.IPReservationID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.IPReservationIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.ProjectIDRef, + Selector: mg.Spec.ForProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ProjectID") + } + mg.Spec.ForProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ProjectIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.VlanID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.VlanIDRef, + Selector: mg.Spec.ForProvider.VlanIDSelector, + To: reference.To{ + List: &VlanList{}, + Managed: &Vlan{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.VlanID") + } + mg.Spec.ForProvider.VlanID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.VlanIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this IPAttachment. +func (mg *IPAttachment) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.DeviceID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.DeviceIDRef, + Selector: mg.Spec.ForProvider.DeviceIDSelector, + To: reference.To{ + List: &DeviceList{}, + Managed: &Device{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.DeviceID") + } + mg.Spec.ForProvider.DeviceID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.DeviceIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this OrganizationMember. +func (mg *OrganizationMember) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.OrganizationID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.OrganizationIDRef, + Selector: mg.Spec.ForProvider.OrganizationIDSelector, + To: reference.To{ + List: &OrganizationList{}, + Managed: &Organization{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.OrganizationID") + } + mg.Spec.ForProvider.OrganizationID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.OrganizationIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this Port. +func (mg *Port) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.NativeVlanID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.NativeVlanIDRef, + Selector: mg.Spec.ForProvider.NativeVlanIDSelector, + To: reference.To{ + List: &VlanList{}, + Managed: &Vlan{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.NativeVlanID") + } + mg.Spec.ForProvider.NativeVlanID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.NativeVlanIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this PortVlanAttachment. +func (mg *PortVlanAttachment) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.DeviceID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.DeviceIDRef, + Selector: mg.Spec.ForProvider.DeviceIDSelector, + To: reference.To{ + List: &DeviceList{}, + Managed: &Device{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.DeviceID") + } + mg.Spec.ForProvider.DeviceID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.DeviceIDRef = rsp.ResolvedReference + + return nil +} + // ResolveReferences of this Project. func (mg *Project) ResolveReferences(ctx context.Context, c client.Reader) error { r := reference.NewAPIResolver(c, mg) @@ -117,3 +331,249 @@ func (mg *Project) ResolveReferences(ctx context.Context, c client.Reader) error return nil } + +// ResolveReferences of this ProjectAPIKey. +func (mg *ProjectAPIKey) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.ProjectIDRef, + Selector: mg.Spec.ForProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ProjectID") + } + mg.Spec.ForProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ProjectIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this ProjectSSHKey. +func (mg *ProjectSSHKey) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.ProjectIDRef, + Selector: mg.Spec.ForProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ProjectID") + } + mg.Spec.ForProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ProjectIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this ReservedIPBlock. +func (mg *ReservedIPBlock) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.ProjectIDRef, + Selector: mg.Spec.ForProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ProjectID") + } + mg.Spec.ForProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ProjectIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.VrfID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.VrfIDRef, + Selector: mg.Spec.ForProvider.VrfIDSelector, + To: reference.To{ + List: &VrfList{}, + Managed: &Vrf{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.VrfID") + } + mg.Spec.ForProvider.VrfID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.VrfIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this SpotMarketRequest. +func (mg *SpotMarketRequest) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.ProjectIDRef, + Selector: mg.Spec.ForProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ProjectID") + } + mg.Spec.ForProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ProjectIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this VirtualCircuit. +func (mg *VirtualCircuit) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ConnectionID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.ConnectionIDRef, + Selector: mg.Spec.ForProvider.ConnectionIDSelector, + To: reference.To{ + List: &ConnectionList{}, + Managed: &Connection{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ConnectionID") + } + mg.Spec.ForProvider.ConnectionID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ConnectionIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.ProjectIDRef, + Selector: mg.Spec.ForProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ProjectID") + } + mg.Spec.ForProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ProjectIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.VlanID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.VlanIDRef, + Selector: mg.Spec.ForProvider.VlanIDSelector, + To: reference.To{ + List: &VlanList{}, + Managed: &Vlan{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.VlanID") + } + mg.Spec.ForProvider.VlanID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.VlanIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.VrfID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.VrfIDRef, + Selector: mg.Spec.ForProvider.VrfIDSelector, + To: reference.To{ + List: &VrfList{}, + Managed: &Vrf{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.VrfID") + } + mg.Spec.ForProvider.VrfID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.VrfIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this Vlan. +func (mg *Vlan) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.ProjectIDRef, + Selector: mg.Spec.ForProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ProjectID") + } + mg.Spec.ForProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ProjectIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this Vrf. +func (mg *Vrf) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.ProjectIDRef, + Selector: mg.Spec.ForProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ProjectID") + } + mg.Spec.ForProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ProjectIDRef = rsp.ResolvedReference + + return nil +} diff --git a/apis/metal/v1alpha1/zz_ipattachment_types.go b/apis/metal/v1alpha1/zz_ipattachment_types.go index 131aa18..05168eb 100755 --- a/apis/metal/v1alpha1/zz_ipattachment_types.go +++ b/apis/metal/v1alpha1/zz_ipattachment_types.go @@ -56,8 +56,15 @@ type IPAttachmentParameters struct { // +kubebuilder:validation:Required CidrNotation *string `json:"cidrNotation" tf:"cidr_notation,omitempty"` - // +kubebuilder:validation:Required - DeviceID *string `json:"deviceId" tf:"device_id,omitempty"` + // +crossplane:generate:reference:type=Device + // +kubebuilder:validation:Optional + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + DeviceIDSelector *v1.Selector `json:"deviceIdSelector,omitempty" tf:"-"` } // IPAttachmentSpec defines the desired state of IPAttachment diff --git a/apis/metal/v1alpha1/zz_organizationmember_types.go b/apis/metal/v1alpha1/zz_organizationmember_types.go index efe4a3d..d146922 100755 --- a/apis/metal/v1alpha1/zz_organizationmember_types.go +++ b/apis/metal/v1alpha1/zz_organizationmember_types.go @@ -50,8 +50,15 @@ type OrganizationMemberParameters struct { Message *string `json:"message,omitempty" tf:"message,omitempty"` // The organization to invite the user to - // +kubebuilder:validation:Required - OrganizationID *string `json:"organizationId" tf:"organization_id,omitempty"` + // +crossplane:generate:reference:type=Organization + // +kubebuilder:validation:Optional + OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + + // +kubebuilder:validation:Optional + OrganizationIDRef *v1.Reference `json:"organizationIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + OrganizationIDSelector *v1.Selector `json:"organizationIdSelector,omitempty" tf:"-"` // Project IDs the member has access to within the organization. If the member is an 'owner', the projects list should be empty. // +kubebuilder:validation:Required diff --git a/apis/metal/v1alpha1/zz_port_types.go b/apis/metal/v1alpha1/zz_port_types.go index b350545..2ceb041 100755 --- a/apis/metal/v1alpha1/zz_port_types.go +++ b/apis/metal/v1alpha1/zz_port_types.go @@ -54,9 +54,16 @@ type PortParameters struct { Layer2 *bool `json:"layer2,omitempty" tf:"layer2,omitempty"` // UUID of native VLAN of the port + // +crossplane:generate:reference:type=Vlan // +kubebuilder:validation:Optional NativeVlanID *string `json:"nativeVlanId,omitempty" tf:"native_vlan_id,omitempty"` + // +kubebuilder:validation:Optional + NativeVlanIDRef *v1.Reference `json:"nativeVlanIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + NativeVlanIDSelector *v1.Selector `json:"nativeVlanIdSelector,omitempty" tf:"-"` + // UUID of the port to lookup // +kubebuilder:validation:Required PortID *string `json:"portId" tf:"port_id,omitempty"` diff --git a/apis/metal/v1alpha1/zz_portvlanattachment_types.go b/apis/metal/v1alpha1/zz_portvlanattachment_types.go index 513ae6e..d634b5c 100755 --- a/apis/metal/v1alpha1/zz_portvlanattachment_types.go +++ b/apis/metal/v1alpha1/zz_portvlanattachment_types.go @@ -36,8 +36,15 @@ type PortVlanAttachmentObservation struct { type PortVlanAttachmentParameters struct { // ID of device to be assigned to the VLAN - // +kubebuilder:validation:Required - DeviceID *string `json:"deviceId" tf:"device_id,omitempty"` + // +crossplane:generate:reference:type=Device + // +kubebuilder:validation:Optional + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + DeviceIDSelector *v1.Selector `json:"deviceIdSelector,omitempty" tf:"-"` // Add port back to the bond when this resource is removed. Default is false // +kubebuilder:validation:Optional diff --git a/apis/metal/v1alpha1/zz_project_types.go b/apis/metal/v1alpha1/zz_project_types.go index b1ff5dc..a8ed0fc 100755 --- a/apis/metal/v1alpha1/zz_project_types.go +++ b/apis/metal/v1alpha1/zz_project_types.go @@ -71,7 +71,7 @@ type ProjectParameters struct { Name *string `json:"name" tf:"name,omitempty"` // The UUID of organization under which you want to create the project. If you leave it out, the project will be create under your the default organization of your account - // +crossplane:generate:reference:type=github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1.Organization + // +crossplane:generate:reference:type=Organization // +kubebuilder:validation:Optional OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` diff --git a/apis/metal/v1alpha1/zz_projectapikey_types.go b/apis/metal/v1alpha1/zz_projectapikey_types.go index 932219c..4278fdc 100755 --- a/apis/metal/v1alpha1/zz_projectapikey_types.go +++ b/apis/metal/v1alpha1/zz_projectapikey_types.go @@ -36,8 +36,15 @@ type ProjectAPIKeyParameters struct { Description *string `json:"description" tf:"description,omitempty"` // UUID of project which the new API key is scoped to - // +kubebuilder:validation:Required - ProjectID *string `json:"projectId" tf:"project_id,omitempty"` + // +crossplane:generate:reference:type=Project + // +kubebuilder:validation:Optional + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` // Flag indicating whether the API key shoud be read-only // +kubebuilder:validation:Required diff --git a/apis/metal/v1alpha1/zz_projectsshkey_types.go b/apis/metal/v1alpha1/zz_projectsshkey_types.go index 29b70fc..b2f2f26 100755 --- a/apis/metal/v1alpha1/zz_projectsshkey_types.go +++ b/apis/metal/v1alpha1/zz_projectsshkey_types.go @@ -44,8 +44,15 @@ type ProjectSSHKeyParameters struct { Name *string `json:"name" tf:"name,omitempty"` // The ID of parent project - // +kubebuilder:validation:Required - ProjectID *string `json:"projectId" tf:"project_id,omitempty"` + // +crossplane:generate:reference:type=Project + // +kubebuilder:validation:Optional + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` // The public key. If this is a file, it // +kubebuilder:validation:Required diff --git a/apis/metal/v1alpha1/zz_reservedipblock_types.go b/apis/metal/v1alpha1/zz_reservedipblock_types.go index 02148b8..b80322e 100755 --- a/apis/metal/v1alpha1/zz_reservedipblock_types.go +++ b/apis/metal/v1alpha1/zz_reservedipblock_types.go @@ -74,8 +74,15 @@ type ReservedIPBlockParameters struct { Network *string `json:"network,omitempty" tf:"network,omitempty"` // The metal project ID where to allocate the address block - // +kubebuilder:validation:Required - ProjectID *string `json:"projectId" tf:"project_id,omitempty"` + // +crossplane:generate:reference:type=Project + // +kubebuilder:validation:Optional + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` // The number of allocated /32 addresses, a power of 2 // +kubebuilder:validation:Optional @@ -90,9 +97,16 @@ type ReservedIPBlockParameters struct { Type *string `json:"type,omitempty" tf:"type,omitempty"` // VRF ID for type=vrf reservations + // +crossplane:generate:reference:type=Vrf // +kubebuilder:validation:Optional VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` + // +kubebuilder:validation:Optional + VrfIDRef *v1.Reference `json:"vrfIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + VrfIDSelector *v1.Selector `json:"vrfIdSelector,omitempty" tf:"-"` + // Wait for the IP reservation block to reach a desired state on resource creation. One of: `pending`, `created`. The `created` state is default and recommended if the addresses are needed within the configuration. An error will be returned if a timeout or the `denied` state is encountered. // +kubebuilder:validation:Optional WaitForState *string `json:"waitForState,omitempty" tf:"wait_for_state,omitempty"` diff --git a/apis/metal/v1alpha1/zz_spotmarketrequest_types.go b/apis/metal/v1alpha1/zz_spotmarketrequest_types.go index 670288a..bec19e1 100755 --- a/apis/metal/v1alpha1/zz_spotmarketrequest_types.go +++ b/apis/metal/v1alpha1/zz_spotmarketrequest_types.go @@ -107,8 +107,15 @@ type SpotMarketRequestParameters struct { Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` // Project ID - // +kubebuilder:validation:Required - ProjectID *string `json:"projectId" tf:"project_id,omitempty"` + // +crossplane:generate:reference:type=Project + // +kubebuilder:validation:Optional + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` // On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are removed // +kubebuilder:validation:Optional diff --git a/apis/metal/v1alpha1/zz_virtualcircuit_types.go b/apis/metal/v1alpha1/zz_virtualcircuit_types.go index b8b0ffe..39cb3ea 100755 --- a/apis/metal/v1alpha1/zz_virtualcircuit_types.go +++ b/apis/metal/v1alpha1/zz_virtualcircuit_types.go @@ -38,8 +38,15 @@ type VirtualCircuitObservation struct { type VirtualCircuitParameters struct { // UUID of Connection where the VC is scoped to - // +kubebuilder:validation:Required - ConnectionID *string `json:"connectionId" tf:"connection_id,omitempty"` + // +crossplane:generate:reference:type=Connection + // +kubebuilder:validation:Optional + ConnectionID *string `json:"connectionId,omitempty" tf:"connection_id,omitempty"` + + // +kubebuilder:validation:Optional + ConnectionIDRef *v1.Reference `json:"connectionIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + ConnectionIDSelector *v1.Selector `json:"connectionIdSelector,omitempty" tf:"-"` // The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. // +kubebuilder:validation:Optional @@ -74,8 +81,15 @@ type VirtualCircuitParameters struct { PortID *string `json:"portId" tf:"port_id,omitempty"` // UUID of the Project where the VC is scoped to - // +kubebuilder:validation:Required - ProjectID *string `json:"projectId" tf:"project_id,omitempty"` + // +crossplane:generate:reference:type=Project + // +kubebuilder:validation:Optional + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` // Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. // +kubebuilder:validation:Optional @@ -92,12 +106,26 @@ type VirtualCircuitParameters struct { Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` // UUID of the VLAN to associate + // +crossplane:generate:reference:type=Vlan // +kubebuilder:validation:Optional VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` + // +kubebuilder:validation:Optional + VlanIDRef *v1.Reference `json:"vlanIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + VlanIDSelector *v1.Selector `json:"vlanIdSelector,omitempty" tf:"-"` + // UUID of the VRF to associate + // +crossplane:generate:reference:type=Vrf // +kubebuilder:validation:Optional VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` + + // +kubebuilder:validation:Optional + VrfIDRef *v1.Reference `json:"vrfIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + VrfIDSelector *v1.Selector `json:"vrfIdSelector,omitempty" tf:"-"` } // VirtualCircuitSpec defines the desired state of VirtualCircuit diff --git a/apis/metal/v1alpha1/zz_vlan_types.go b/apis/metal/v1alpha1/zz_vlan_types.go index 577c868..799998e 100755 --- a/apis/metal/v1alpha1/zz_vlan_types.go +++ b/apis/metal/v1alpha1/zz_vlan_types.go @@ -43,8 +43,15 @@ type VlanParameters struct { Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` // ID of parent project - // +kubebuilder:validation:Required - ProjectID *string `json:"projectId" tf:"project_id,omitempty"` + // +crossplane:generate:reference:type=Project + // +kubebuilder:validation:Optional + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` // VLAN ID, must be unique in metro // +kubebuilder:validation:Optional diff --git a/apis/metal/v1alpha1/zz_vrf_types.go b/apis/metal/v1alpha1/zz_vrf_types.go index 82ba793..c591467 100755 --- a/apis/metal/v1alpha1/zz_vrf_types.go +++ b/apis/metal/v1alpha1/zz_vrf_types.go @@ -52,8 +52,15 @@ type VrfParameters struct { Name *string `json:"name" tf:"name,omitempty"` // Project ID - // +kubebuilder:validation:Required - ProjectID *string `json:"projectId" tf:"project_id,omitempty"` + // +crossplane:generate:reference:type=Project + // +kubebuilder:validation:Optional + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` } // VrfSpec defines the desired state of Vrf diff --git a/config/overrides.go b/config/overrides.go index ff78a0c..814179a 100644 --- a/config/overrides.go +++ b/config/overrides.go @@ -43,39 +43,38 @@ func KnownReferencers() tjconfig.ResourceOption { //nolint:gocyclo if (s.Computed && !s.Optional) || s.Sensitive { continue } - if r.ShortGroup != "metal" { - continue - } - switch { - case strings.HasSuffix(k, "project_id"): - r.References[k] = tjconfig.Reference{ - // github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1.Project - Type: "Project", - } - case strings.HasSuffix(k, "organization_id"): - r.References[k] = tjconfig.Reference{ - Type: "Organization", - } - case strings.HasSuffix(k, "connection_id"): - r.References[k] = tjconfig.Reference{ - Type: "Connection", - } - case strings.HasSuffix(k, "device_id"): - r.References[k] = tjconfig.Reference{ - Type: "Device", - } - case strings.HasSuffix(k, "vlan_id"): - // vlan_vnid is ignored because it is an int type - r.References[k] = tjconfig.Reference{ - Type: "Vlan", - } - case strings.HasSuffix(k, "vrf_id"): - r.References[k] = tjconfig.Reference{ - Type: "Vrf", - } - case strings.HasSuffix(k, "ip_reservation_id"): - r.References[k] = tjconfig.Reference{ - Type: "ReservedIPBlock", + if r.ShortGroup == "metal" { + switch { + case strings.HasSuffix(k, "project_id"): + r.References[k] = tjconfig.Reference{ + // github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1.Project + Type: "Project", + } + case strings.HasSuffix(k, "organization_id"): + r.References[k] = tjconfig.Reference{ + Type: "Organization", + } + case strings.HasSuffix(k, "connection_id"): + r.References[k] = tjconfig.Reference{ + Type: "Connection", + } + case strings.HasSuffix(k, "device_id"): + r.References[k] = tjconfig.Reference{ + Type: "Device", + } + case strings.HasSuffix(k, "vlan_id"): + // vlan_vnid is ignored because it is an int type + r.References[k] = tjconfig.Reference{ + Type: "Vlan", + } + case strings.HasSuffix(k, "vrf_id"): + r.References[k] = tjconfig.Reference{ + Type: "Vrf", + } + case strings.HasSuffix(k, "ip_reservation_id"): + r.References[k] = tjconfig.Reference{ + Type: "ReservedIPBlock", + } } } } diff --git a/config/provider.go b/config/provider.go index d8d5aa8..541ee50 100644 --- a/config/provider.go +++ b/config/provider.go @@ -20,9 +20,11 @@ import ( // Note(turkenh): we are importing this to embed provider schema document _ "embed" + tjconfig "github.com/crossplane/terrajet/pkg/config" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/crossplane-contrib/provider-jet-equinix/config/ecx/l2connection" "github.com/crossplane-contrib/provider-jet-equinix/config/metal/device" - tjconfig "github.com/crossplane/terrajet/pkg/config" ) const ( @@ -60,5 +62,7 @@ func GetProvider() *tjconfig.Provider { // DefaultResource returns a DefaultResourceFn that makes sure the original // DefaultResource call is made with given options here. func DefaultResource(opts ...tjconfig.ResourceOption) tjconfig.DefaultResourceFn { - return tjconfig.DefaultResource + return func(name string, terraformResource *schema.Resource, orgOpts ...tjconfig.ResourceOption) *tjconfig.Resource { //nolint:gocritic + return tjconfig.DefaultResource(name, terraformResource, append(orgOpts, opts...)...) + } } diff --git a/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml b/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml index f9e2762..db6069d 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml @@ -73,9 +73,31 @@ spec: deviceId: description: ID of device type: string + deviceIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + deviceIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object required: - addressFamily - - deviceId type: object providerConfigRef: default: diff --git a/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml b/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml index fe93302..40df7b0 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml @@ -67,12 +67,34 @@ spec: description: The ID of the device on which the network type should be set type: string + deviceIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + deviceIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object type: description: Network type to set. Must be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded type: string required: - - deviceId - type type: object providerConfigRef: diff --git a/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml b/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml index 7a233a3..7330400 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml @@ -67,6 +67,29 @@ spec: description: UUID of the Public or VRF IP Reservation to associate, must be in the same metro as the VLAN type: string + ipReservationIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + ipReservationIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object privateIpv4SubnetSize: description: Size of the private IPv4 subnet to create for this gateway, one of [8 16 32 64 128] @@ -74,12 +97,55 @@ spec: projectId: description: UUID of the Project where the Gateway is scoped to type: string + projectIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + projectIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object vlanId: description: UUID of the VLAN to associate type: string - required: - - projectId - - vlanId + vlanIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + vlanIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object type: object providerConfigRef: default: diff --git a/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml b/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml index b9dbf6e..3946994 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml @@ -67,9 +67,31 @@ spec: type: string deviceId: type: string + deviceIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + deviceIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object required: - cidrNotation - - deviceId type: object providerConfigRef: default: diff --git a/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml b/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml index 2ccbba1..9a3f680 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml @@ -74,6 +74,29 @@ spec: organizationId: description: The organization to invite the user to type: string + organizationIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + organizationIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object projectsIds: description: Project IDs the member has access to within the organization. If the member is an 'owner', the projects list should be empty. @@ -88,7 +111,6 @@ spec: type: array required: - invitee - - organizationId - projectsIds - roles type: object diff --git a/package/crds/metal.equinix.jet.crossplane.io_ports.yaml b/package/crds/metal.equinix.jet.crossplane.io_ports.yaml index 669eb16..062f874 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_ports.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_ports.yaml @@ -73,6 +73,29 @@ spec: nativeVlanId: description: UUID of native VLAN of the port type: string + nativeVlanIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + nativeVlanIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object portId: description: UUID of the port to lookup type: string diff --git a/package/crds/metal.equinix.jet.crossplane.io_portvlanattachments.yaml b/package/crds/metal.equinix.jet.crossplane.io_portvlanattachments.yaml index 80c9593..b12bb90 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_portvlanattachments.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_portvlanattachments.yaml @@ -67,6 +67,29 @@ spec: deviceId: description: ID of device to be assigned to the VLAN type: string + deviceIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + deviceIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object forceBond: description: Add port back to the bond when this resource is removed. Default is false @@ -85,7 +108,6 @@ spec: description: VXLAN Network Identifier, integer type: number required: - - deviceId - portName - vlanVnid type: object diff --git a/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml b/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml index 3f41f8c..924dc4a 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml @@ -69,12 +69,34 @@ spec: projectId: description: UUID of project which the new API key is scoped to type: string + projectIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + projectIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object readOnly: description: Flag indicating whether the API key shoud be read-only type: boolean required: - description - - projectId - readOnly type: object providerConfigRef: diff --git a/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml b/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml index a1505e5..3ef85f9 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml @@ -69,12 +69,34 @@ spec: projectId: description: The ID of parent project type: string + projectIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + projectIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object publicKey: description: The public key. If this is a file, it type: string required: - name - - projectId - publicKey type: object providerConfigRef: diff --git a/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml b/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml index dceb18e..b72aeb0 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml @@ -95,6 +95,29 @@ spec: description: The metal project ID where to allocate the address block type: string + projectIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + projectIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object quantity: description: The number of allocated /32 addresses, a power of 2 @@ -111,6 +134,29 @@ spec: vrfId: description: VRF ID for type=vrf reservations type: string + vrfIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + vrfIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object waitForState: description: 'Wait for the IP reservation block to reach a desired state on resource creation. One of: `pending`, `created`. The @@ -118,8 +164,6 @@ spec: are needed within the configuration. An error will be returned if a timeout or the `denied` state is encountered.' type: string - required: - - projectId type: object providerConfigRef: default: diff --git a/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml b/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml index 837e46c..cbf9f6b 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml @@ -133,6 +133,29 @@ spec: projectId: description: Project ID type: string + projectIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + projectIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object waitForDevices: description: On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are @@ -143,7 +166,6 @@ spec: - devicesMin - instanceParameters - maxBidPrice - - projectId type: object providerConfigRef: default: diff --git a/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml b/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml index 34ddf7d..5ca8c6f 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml @@ -66,6 +66,29 @@ spec: connectionId: description: UUID of Connection where the VC is scoped to type: string + connectionIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + connectionIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object customerIp: description: The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. @@ -114,6 +137,29 @@ spec: projectId: description: UUID of the Project where the VC is scoped to type: string + projectIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + projectIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object speed: description: Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection @@ -136,13 +182,57 @@ spec: vlanId: description: UUID of the VLAN to associate type: string + vlanIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + vlanIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object vrfId: description: UUID of the VRF to associate type: string + vrfIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + vrfIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object required: - - connectionId - portId - - projectId type: object providerConfigRef: default: diff --git a/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml b/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml index 05c6fcf..fff56ea 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml @@ -74,11 +74,32 @@ spec: projectId: description: ID of parent project type: string + projectIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + projectIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object vxlan: description: VLAN ID, must be unique in metro type: number - required: - - projectId type: object providerConfigRef: default: diff --git a/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml b/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml index 078637c..638886a 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml @@ -86,10 +86,32 @@ spec: projectId: description: Project ID type: string + projectIdRef: + description: A Reference to a named object. + properties: + name: + description: Name of the referenced object. + type: string + required: + - name + type: object + projectIdSelector: + description: A Selector selects an object. + properties: + matchControllerRef: + description: MatchControllerRef ensures an object with the + same controller reference as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + type: object required: - metro - name - - projectId type: object providerConfigRef: default: From 4f455353bb8badc0c484f0cb44f8542a07c8925c Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sun, 2 Oct 2022 00:29:54 -0400 Subject: [PATCH 6/6] change local package name in .golangci.yml Signed-off-by: Marques Johansson --- .golangci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 71c9575..e404d5d 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -38,7 +38,7 @@ linters-settings: goimports: # put imports beginning with prefix after 3rd-party packages; # it's a comma-separated list of prefixes - local-prefixes: github.com/crossplane-contrib/provider-jet-template + local-prefixes: github.com/crossplane-contrib/provider-jet-equinix gocyclo: # minimal code complexity to report, 30 by default (but we recommend 10-20)